首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在foreach循环中使用powershell编写嵌套XML文件

在foreach循环中使用powershell编写嵌套XML文件
EN

Stack Overflow用户
提问于 2013-07-11 19:07:23
回答 1查看 3.8K关注 0票数 0

我正在尝试用powershell和XmlWriter写一个嵌套的XML文件。然而,输出并不是我所期望的,也不符合我在代码中逻辑设置的方式。我知道这有点长,但请看下面的代码:

代码语言:javascript
复制
function newXML($output_file, $hubs_array){
        #create directory
    new-item -path "$outage_dir\$current_year\$current_month" -type directory -force
    # Create The Document and format
    $XmlWriter = New-Object System.XMl.XmlTextWriter($output_file,$Null)
    #format xml
    $xmlWriter.Formatting = [System.Xml.Formatting]::Indented
    # Write the XML Decleration
    $xmlWriter.WriteStartDocument()
    # Set the XSL
    $XSLPropText = "type='text/xsl' href='style.xsl'"
    $xmlWriter.WriteProcessingInstruction("xml-stylesheet", $XSLPropText)
    # <identifier><start of outage><end of outage><outage as perc>
    # Write Root Element    
    $xmlWriter.WriteStartElement("Hubs")
    # Write the Document
    foreach ($hub in $hubs_array){
            $xmlWriter.WriteStartElement("Hub")
            $xmlWriter.WriteAttributeString("name",$hub.hubname)
            foreach($device in $hub.devices){
                $xmlWriter.WriteStartElement("Device")
                $xmlWriter.WriteElementString("identifier", $device.device_id)
                $xmlWriter.WriteEndElement
                $xmlWriter.WriteElementString("sla", $device.SLA)
                $xmlWriter.WriteEndElement
                $xmlWriter.WriteElementString("outage_as_perc", $device.down_4dp)
                $xmlWriter.WriteEndElement
                $xmlWriter.WriteStartElement("Outages")
                $xmlWriter.WriteAttributeString("total",$device.outages)
                foreach($outage in $device.outagesArray){
                    $xmlWriter.WriteStartElement("Outage")
                    $xmlWriter.WriteElementString("start_of_outage", $outage.down_start)
                    $xmlWriter.WriteEndElement
                    $xmlWriter.WriteElementString("end_of_outage", $outage.down_end)
                    $xmlWriter.WriteEndElement
                    $xmlWriter.WriteElementString("total_downtime", $outage.downtime)
                    $xmlWriter.WriteEndElement
                    #close tag for outage
                    $xmlWriter.WriteEndElement
                }
                #close tag for outages
                $xmlWriter.WriteEndElement
                #close tag for device
                $xmlWriter.WriteEndElement

            }
            #close tag for hub
            $xmlWriter.WriteEndElement
    }
    #close tag for hubs
    $xmlWriter.WriteEndElement
    $xmlWriter.WriteEndDocument() 
    # Finish The Document
    $xmlWriter.Finalize
    $xmlWriter.Flush
    $xmlWriter.Close()
}

我假设这将以以下格式输出:

代码语言:javascript
复制
<Hubs>
  <Hub>
    <Device>
      <identifier></>
      <sla></>
      <outage_as_perc></>
      <Outages total="2">
         <outage>
         </outage>
      </Outages>
    </Device>
   </Hub>
</Hubs>

我正在循环的事实似乎把它搞乱了,但我不知道为什么……

我得到的结果是:

代码语言:javascript
复制
<Hubs>
  <Hub>
    <Device>
      <identifier></>
      <sla></>
      <outage_as_perc></>
      <Outages total="2">
         <outage>
           <outage>
              <outage>
                 <outage>
                    <outage>
                    </outage>
                 </outage>
              </outage>
           </outage>
         </outage>
      </Outages>
    </Device>
   </Hub>
 </Hubs>

提前感谢,很抱歉读了这么久!

EN

回答 1

Stack Overflow用户

发布于 2013-07-19 15:01:26

使用

代码语言:javascript
复制
$xmlWriter.WriteEndElement()

而不是

$xmlWriter.WriteEndElement

代码语言:javascript
复制
should fix your problem

this post中也存在同样的问题

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17591764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档