删除特定的XML元素

时间:2014-10-18 13:58:56

标签: xml vb.net xmldocument

我想删除整个" TableData"具有特定ID的Elemt(在本例中为ID 10)来自我的xml:

<DataPaths>
  <TableData>
    <ID>10</ID>
    <TablePath>C:\Users\Tom\Test.xls</TablePath>
    <TableName>TestName</TableName>
    <Mode>TestMode</Mode>
  </TableData>
</DataPaths>

我尝试了两种不同的解决方案,我想我几乎就在那里。

解决方案1:

Dim XmldocDel As New XmlDocument()
        XmldocDel.Load("" & buildSettingsPath)
        Dim node As XmlNode
        node = XmldocDel.SelectSingleNode("//DataPaths/TableData[ID = '10']")

        If MessageBox.Show("Are you sure you want to delete:", MessageBoxButtons.YesNo) = DialogResult.Yes Then
            If node IsNot Nothing Then
            node.ParentNode.RemoveChild(node)
            'node.ParentNode.RemoveAll()

            XmldocDel.Save("" & buildSettingsPath)
            Reload()
        Else
            MessageBox.Show("No node found")
        End If

        Else
            Exit Sub
        End If

我在这里得到一个零异常。

解决方案2:

Dim clientNodes = XmldocDel.SelectNodes("//ID")
        For Each elem As Xml.XmlElement In clientNodes
            If elem.InnerText = "10" Then
                elem.ParentNode.RemoveChild(elem)
                Exit For
            End If
        Next

这将无所事事。

1 个答案:

答案 0 :(得分:3)

使用解决方案1,因为您要删除整个TableData元素,XPath应该选择TableData元素而不是ID元素:

.....
node = XmldocDel.SelectSingleNode("//DataPaths/TableData[ID = '10']")
.....

*)稍微更新了XPath。查看发布的XML,第一步应该是DataPaths而不是DataSetPaths

更新:

您的实际XML具有默认命名空间。因此,在这种情况下,您需要使用XmlNamespaceManager注册映射到默认命名空间URI的前缀。在XPath中使用已注册的前缀,并将命名空间管理器作为SelectSingleNode()的第二个参数传递 方法:

Dim nsManager As New XmlNamespaceManager(New NameTable())
nsManager.AddNamespace("d", "http://tempuri.org/DataPaths.xsd")
.....
node = XmldocDel.SelectSingleNode("//d:DataPaths/d:TableData[d:ID = '10']", nsManager)
.....

<强> [.NET fiddle demo]