基本上我试图从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等的节点。我只是想弄清楚如何得到它然后用它来编辑节点
答案 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>