【发布时间】:2018-01-06 09:30:08
【问题描述】:
我尝试使用 XmlDocument.select 在下面的 xml 文件中获取节点的值
<?xml version="1.0"?>
<cqresponse xmlns="http://ibm.com/rational/clearquest/web/v7.1">
<displayname>hello world</displayname>
<fields>
<field>
<fieldname>Defect_details_linenumber</fieldname>
<datatype>MULTILINE_STRING</datatype>
<value><![CDATA[["aaa"]]]></value>
</field>
<field>
<fieldname>Defect_detailsAf_artefs</fieldname>
<datatype>MULTILINE_STRING</datatype>
<value><![CDATA[["bbb"]]]></value>
</field>
</fields>
</cqresponse>
使用此代码
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim doc As XmlDocument = New XmlDocument()
doc.Load("Temp_File.xml")
Dim nodeList As XmlNodeList
Dim root As XmlNode = doc.DocumentElement
nodeList = root.SelectNodes("descendant::fields[field/fieldname='Defect_detailsAf_artefs']")
Debug.Print(nodeList.Count)
Debug.Print(nodeList(0).InnerText)
End Sub
但 nodelist.count 总是返回 0。我认为它找不到节点“Defect_details_linenumber”。您能否帮我指出 xPath "descendant::fields[field/fieldname='Defect_detailsAf_artefs']" 中是否有问题或代码中有问题
我尝试使用 xpath ""descendant::fields" 但我遇到了同样的问题 nodelist.count 仍然返回 0
已解决
无法选择节点,因为它缺少命名空间。如果我们改为这样,我的代码会很好
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim doc As XmlDocument = New XmlDocument()
doc.Load("Temp_File.xml")
'Add namespace for xml here
Dim ns As XmlNamespaceManager = New XmlNamespaceManager(doc.NameTable)
ns.AddNamespace("ibm", "http://ibm.com/rational/clearquest/web/v7.1")
'Get root node: node "cqresponse"
Dim root As XmlNode = doc.DocumentElement
'Get node which have child node fieldname = 'Defect_details_linenumber'
Dim node As XmlNode = root.SelectSingleNode("descendant::ibm:fields/ibm:field[ibm:fieldname='Defect_detailsAf_artefs']/ibm:value", ns)
Debug.Print(node.InnerText) 'it will show "bbb"
End Sub
【问题讨论】: