2015-05-09 69 views
2

我想用这样的多个命名空间创建一个XML文件。我需要在标签使用PowerShell,我怎样才能使用多个命名空间

<?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> 

如何添加正确的前缀?

回答

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") 
+0

我需要太perfix ...但非的xmlns定义 – debharlock

+0

@debharlock,我更新了我的答案。 – JPBlanc

+0

谢谢...这是完美的 – debharlock