VB.Net XML从属性获取节点然后写入该节点

时间:2014-04-22 15:48:10

标签: xml vb.net

基本上我试图从XML文件中读取设置,但我所有节点都与我使用的名称相同,所以我必须为它们分配ID,但我该如何处理从属性ID获取节点并写入我刚刚找到的那个节点

这就是我所拥有的:

Public Sub write_xml_file(ByVal path As String, ByVal nodePath As String, ByVal innerText As String)
    If IO.File.Exists(path) = True Then

        ' Load the XmlDocument.
        Dim xd As New XmlDocument()
        xd.Load(path)

        Dim node As XmlNodeList = xd.SelectNodes(nodePath)

        If node IsNot Nothing Then
            Dim nodeId As Integer = 0
            For Each childNode As XmlElement In node
                MessageBox.Show(get_node_count(node))
                If childNode("p").InnerText = "" Then
                    MessageBox.Show("Found empty...")
                    Exit For
                Else
                    MessageBox.Show("Empty place not found, carry on looking...")
                    nodeId += 1
                    Continue For
                End If
            Next
        End If
        MessageBox.Show("Finished")
        ' Save the Xml.
        xd.Save(path)
    Else
        MessageBox.Show("Could not write to selected path: " + path)
    End If
End Sub

正如你所看到的,我正在做的只是从列表中获取第一个节点而没有获得具有属性1,2,3等的节点。我只是想弄清楚如何得到它然后用它来编辑节点

1 个答案:

答案 0 :(得分:1)

当您调用xd.SelectNodes(nodePath)时,nodePath参数可以是任何有效的XPath。 XPath提供各种灵活性。在这种情况下,您希望添加一个条件子句,该子句表示您只想按名称​​选择节点,其中它们还包含某个名称等于某个值的属性。这是一个如何在XPath中表达类似条件的示例:

Dim node As XmlNodeList = xd.SelectNodes("/MyRoot/MyElement[@MyAttribute = 'MyValue']")

在上面的示例中,文档对象将在XML文档的根目录中查找MyRoot元素。然后它会找到所有MyElement元素,它们是MyRoot元素的直接子元素。然后,它会过滤它们,只包含一个名为MyAttribute的属性,它等于MyValue。换句话说:

<?xml version="1.0" encoding="UTF-8"?>
<MyRoot>
  <MyElement>Will not be selected</MyElement>
  <MyElement MyAttribute="Wrong">Will not be selected</MyElement>
  <MyElement MyAttribute="MyValue">Will be selected</MyElement>
  <MyElement MyAttribute="MyValue">Will be selected</MyElement>
</MyRoot>