使用PowerShell,我如何使用多个名称空间

时间:2015-05-09 04:18:11

标签: xml powershell xml-namespaces xmldocument

我想创建一个包含多个名称空间的XML文件。我需要在标记的开头插入正确的前缀

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<HXT:Sending xmlns:HXT="http://www.HiTooT.com/HXT-Rec">   
     <O2:Info xmlns:O2="urn:osis:names:specification:gtr:schema:xsd:Info-2" xmlns:dad="urn:osis:names:specification:gtr:schema:xsd:AggregateInfo" xmlns:dbd="urn:osis:names:specification:gtr:schema:xsd:BasicInfo">
          <dad:ID>12015</dad:ID>
          <dbd:IssueDate>05032015</dbd:IssueDate>
          <dbd:TypeCode>ORA_PF</dbd:TypeCode>   
     </O2:Info> 
</HXT:Sending>

使用此PowerShell代码

$XMLFilePath = "c:\tmp\test1.xml"

    #---Create empty XML File
    New-Item $XMLFilePath -Type File -Force | Out-Null

    #---Creating Base Structure
    $XMLFile = New-Object XML
    [System.XML.XMLDeclaration]$XMLDeclaration = $XMLFile.CreateXMLDeclaration("1.0", "UTF-8", "yes")
    $XMLFile.AppendChild($XMLDeclaration) | Out-Null

    #---RootObject
    $Sending = $XMLFile.CreateElement("HXT", "Sending", "http://www.HiTooT.com/HXT-Rec")
    $XMLFile.AppendChild($Sending)


    #Order node
    $Info = $XMLFile.CreateElement("Info"); 

    $Info.SetAttribute("xmlns:O2", "urn:osis:names:specification:gtr:schema:xsd:Info-2")
    $Info.SetAttribute("xmlns:dad", "urn:osis:names:specification:gtr:schema:xsd:AggregateInfo")
    $Info.SetAttribute("xmlns:dbd", "urn:osis:names:specification:gtr:schema:xsd:BasicInfo")

    $Sending.AppendChild($Info)
    #---

    $ID    = $XMLFile.CreateElement("ID")
    $ID.InnerText    = "12015"
    $Info.AppendChild($ID)

    $IssueDate    = $XMLFile.CreateElement("cbc:IssueDate")
    $IssueDate.InnerText    = "05032015" 
    $Info.AppendChild($IssueDate)

    $TypeCode    = $XMLFile.CreateElement("TypeCode")
    $TypeCode.InnerText    = "ORA_PF"
    $Info.AppendChild($TypeCode)

    $XMLFile.Save($XMLFilePath);

    notepad $XMLFilePath

只能这样做

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<HXT:Sending xmlns:HXT="http://www.HiTooT.com/HXT-Rec">
  <Info xmlns:O2="urn:osis:names:specification:gtr:schema:xsd:Info-2" xmlns:dad="urn:osis:names:specification:gtr:schema:xsd:AggregateInfo" xmlns:dbd="urn:osis:names:specification:gtr:schema:xsd:BasicInfo">
    <ID>12015</ID>
    <IssueDate>05032015</IssueDate>
    <TypeCode>ORA_PF</TypeCode>
  </Info>
</HXT:Sending>

如何添加正确的前缀?

1 个答案:

答案 0 :(得分:2)

您是否尝试像这样创建$ info元素:

#Order node
$Info = $XMLFile.CreateElement("O2", "Info", "urn:osis:names:specification:gtr:schema:xsd:Info-2")

对我而言,它给出了:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<HXT:Sending xmlns:HXT="http://www.HiTooT.com/HXT-Rec">
  <O2:Info xmlns:O2="urn:osis:names:specification:gtr:schema:xsd:Info-2" xmlns:dad="urn:osis:names:specification:gtr:schema:xsd:AggregateInfo" xmlns:dbd="urn:osis:names:specification:gtr:schema:xsd:BasicInfo">
    <ID>12015</ID>
    <IssueDate>05032015</IssueDate>
    <TypeCode>ORA_PF</TypeCode>
  </O2:Info>
</HXT:Sending>

更新以解释如何为内部标记添加前缀:

您可以对内部标记使用相同的调用,该属性将不会在父节点中出现一次。

$ID = $XMLFile.CreateElement("O2", "ID", "urn:osis:names:specification:gtr:schema:xsd:Info-2")