xml - 使用PowerShell,如何使用多个命名空间

标签 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>

如何添加正确的前缀?

最佳答案

您是否尝试像这样创建 $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")

关于xml - 使用PowerShell,如何使用多个命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30135937/

相关文章:

powershell - 使PowerShell认为对象不可枚举

c++ - 使用 C/C++ 通过管道向/从 Powershell 设置 UTF-8 输入和获取 UTF-8 输出

java - 获取xml命名空间(不触发UnknownHostException)

xsd - 在 XML Schema 中为不同的命名空间声明一个属性

xml - 输入xml开始标签时自动添加结束标签?

xml - Node.js - Craigslist 批量发布 api(无法解析 rss)

xml - 谁能推荐 VIN 号码的 REST/SOAP Web 服务?

c# - OpenXML Power Tools 编译时出现问题 : 'OutputTypeAttribute' could not be found

java - 没有命名空间的 XML。针对多个 XSD 之一进行验证

java - Android 应用未在其他设备上运行