使用前缀将新的Node(String)附加到XML

时间:2014-05-05 22:48:49

标签: xml vb.net prefix

我已经使用了XML并且遇到了以下问题。我有以下XML:

<cfdi:Receit xmlns:xsi="http://..." xmlns:cfdi="http://..." Certificate="20001000000200001437">
     <cfdi:From nombre="My Name">
          <cfdi:Country Country="USA"/>
     </cfdi:From>
     <cfdi:To name="Receptor Name">
          <cfdi:Country Country="UK"/>
     </cfdi:Receptor>
</cfdi:Receit>

我一直在尝试将一个新的节点“Export”插入到这个XML的Root中,这个节点已经保存在一个字符串中,这个节点应该看起来像这样

<cfdi:Receit xmlns:xsi="http://..." xmlns:cfdi="http://..." Certificate="20001000000200001437">
     <cfdi:From nombre="My Name">
          <cfdi:Country Country="USA"/>
     </cfdi:From>
     <cfdi:To name="Receptor Name">
          <cfdi:Country Country="UK"/>
     </cfdi:Receptor>

     <cfdi:Export>
          <tfd:ExportData xmlns:tfd="http://..." xmlns:xsi="http://..." exportCertificate="0001110111010110" ExportQuantity="12,255"/>
     </cfdi:Export>

</cfdi:Receit>

是否有一种简单的方法可以将节点作为字符串插入原始XML的根目录?我一直在尝试多种方式,一种是我只是插入字符串,但是当它被导航器打开时,它似乎不构成XML作为节点的一部分。 我已经尝试过以下示例,但它们都存在新节点中需要前缀“cfdi”的问题。

Dim xdOriginal As New XDocument = "Original XML"
Dim NewNode As String = <cfdi:Export> <tfd:ExportData xmlns:tfd="http://..." xmlns:xsi="http://..." exportCertificate="0001110111010110" ExportQuantity="12,255"/> </cfdi:Export>


Dim xDoc As New XElement(XElement.Parse(NewNode)) ' Error Here

xdOriginal.Root.Add(xDoc)

1 个答案:

答案 0 :(得分:0)

您可以使用XNamespace变量来提供在已解析的XML字符串范围之外声明的名称空间前缀:

Dim xdOriginal As New XDocument = "Original XML"

Dim cfdi As XNamespace = "cfdi namespace URI here"
Dim newNodeContent = <tfd:ExportData xmlns:tfd="http://..." xmlns:xsi="http://..." exportCertificate="0001110111010110" ExportQuantity="12,255"/>
'use XNamespace variable to add prefix to <Export> element :'
Dim newNode = New XElement(cfdi + "Export", newNodeContent)
xdOriginal.Root.Add(newNode)