使用vb .net从xml中删除<nom:hrs>之类的节点

时间:2016-05-25 05:47:23

标签: .net xml vb.net linq

我有这样的XML:

<cfdi:Comprobante>
  <cfdi:Emisor>
  </cfdi:Emisor>
  <cfdi:Conceptos>

    <cfdi:Concepto/>

  </cfdi:Conceptos>

  <cfdi:Complemento>

    <nomina:Nomina DATO="21">

      <nomina:Percepciones>

        <nomina:Percepcion/>

      </nomina:Percepciones>

      <nomina:Incapacidades/>

      <nomina:HorasExtras/>

    </nomina:Nomina>

  </cfdi:Complemento>

</cfdi:Comprobante>

并需要删除节点:

      <nomina:Incapacidades/>
      <nomina:HorasExtras/>

,属性DATO =“21”。

我尝试了下一个代码:

Dim doc As XDocument = XDocument.Load(_xml2)
doc.Root.Element("nomina:Incapacidades").Remove()
doc.Root.Element("nomina:HorasExtras").Remove()
doc.Root.Element("nomina:Nomina").Attribute("DATO").Remove()
doc.Save(_xml2)

但无效。

如果有人可以帮助我会很好。

2 个答案:

答案 0 :(得分:0)

试试这个

        doc.Descendants.Where(Function(x) x.Name.LocalName = ("Incapacidades")).Remove()
        doc.Descendants.Where(Function(x) x.Name.LocalName = ("HorasExtras")).Remove()
        doc.Descendants.Where(Function(x) x.Name.LocalName = ("Nomina")).Remove()

答案 1 :(得分:0)

您可以使用XNamespace和element local-name的组合来引用命名空间中的元素。例如,假设在实际的XML中声明了名称空间前缀nomina

xmlns:nomina="foo"

然后,您可以找到以HorasExtras为前缀的nomina元素,并使用以下内容将其删除:

Dim nomina As XNamespace = "foo"
doc.Root.Element(nomina + "HorasExtras").Remove()