2013-05-13 63 views
2

我有一个powershell脚本,我试图建立一个冗长的XML文件的导入。我遇到的问题是,运行时,XML的输出包含所有打开的标记,但从不关闭它们直到结束。尽管我有“WriteEndElement”函数以我想要的顺序关闭标签,但直到所有的“WriteStartElement”标签都已完成,才会遵守这些标签。即,输出将看起来像powershell XML编写器嵌套循环

<1> 
    <2> 
    <3> 
     <4> 
     </4> 
    </3> 
    </2> 
</1> 

,但在我的代码,3收盘应该在开盘前4
我的脚本来了:

$groups = gc "./groups.txt" 
$regions = gc "./regions.txt" 
$types = gc "./Types.txt" 

$output = "./Workgroups.txt" 
$xmlOut = "c:\wgIMPORT.xml" 
$wgExt = 60001 


# Create The Document 
$XmlWriter = New-Object System.XMl.XmlTextWriter($xmlOut,$Null) 
# Set The Formatting 
$xmlWriter.Formatting = "Indented" 
$xmlWriter.Indentation = "4" 
# Write the XML Decleration 
$xmlWriter.WriteStartDocument() 
# Set the XSL 
$XSLPropText = "type='text/xsl' href='style.xsl'" 
$xmlWriter.WriteProcessingInstruction("xml-stylesheet", $XSLPropText) 
# Write Root Element 
$xmlWriter.WriteStartElement("Scenarios") 
# Write the Document 
$xmlWriter.WriteStartElement("Scenario") 
$xmlWriter.WriteElementString("Schedule","Immediate") 



for($i=0;$i -lt $groups.Count;$i++){ 
    for($j=0;$j -lt $regions.Count;$j++){ 
     for($k=0;$k -lt $types.Count;$k++){ 
      #$groups[$i] + "_" + $regions[$j] + "_" + $types[$k] >> $output 
      $wg = $groups[$i] + "_" + $regions[$j] + "_" + $types[$k] 
      $xmlWriter.WriteStartElement("WorkgroupCommand") 
      $XmlWriter.WriteAttributeString("Name","$wg") 
      $XmlWriter.WriteAttributeString("Extension","$wgExt") 
      $XmlWriter.WriteAttributeString("HasQueue","1") 
      $xmlWriter.WriteStartElement("Attributes") 
      $xmlWriter.WriteStartElement("Attribute") 
      $XmlWriter.WriteAttributeString("Value","206") 
      $xmlWriter.WriteEndElement # end Attribute 
      $xmlWriter.WriteElementString("Value","TestSkill") 
       $xmlWriter.WriteEndElement # end Attributes 
      $xmlWriter.WriteStartElement("Members") 
      $xmlWriter.WriteElementString("Member","tonkaadmin") 
      $xmlWriter.WriteEndElement # end </Members> Command 
      $xmlWriter.WriteEndElement # end Workgroup Command 
      $wgExt++ 
     } 
    } 
}  

$xmlWriter.WriteEndElement # end Scenario 
# Write Close Tag for Root Element 
$xmlWriter.WriteEndElement # end Scenarios 
# End the XML Document 
$xmlWriter.WriteEndDocument() 
# Finish The Document 
$xmlWriter.Finalize 
$xmlWriter.Flush 
$xmlWriter.Close() 
+0

给出代码,you'r输出的结构看起来很明显。在最低级别打开en关闭的唯一元素是'Members'和'Attribute'。也许如果你想给输入文件和你想要的例子,更多的人会回答。 – 2013-05-15 19:55:24

回答

1

使用

$xmlWriter.WriteEndElement() 

而不是

$xmlWriter.WriteEndElement 

应该解决您的问题