Xml VB.net XPath未获取节点列表

Xml VB.net XPath未获取节点列表,xml,vb.net,xpath,Xml,Vb.net,Xpath,我有一个XML文档: <?xml version="1.0" encoding="UTF-8" standalone="no"?> <Root xmlns="u" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/xml/abc.xsd"> <DOCID>123456789</DOCID> ... <Body>

我有一个XML文档:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Root xmlns="u" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="/xml/abc.xsd">
    <DOCID>123456789</DOCID>
    ...
    <Body>
        <Problems>
            <Problem>Data1
            </Problem>
            <Problem>Data2
            </Problem>
            <Problem>Data3
            </Problem>
        </Problems>
    </Body>
</Root>
nodeList
变量的计数为0。我使用了一个免费的在线XPath测试仪,并使用了上面的路径,它工作了,但在VB.NET中不工作

  • 您的XML使用名称空间,因此需要
    XmlNamespaceManager
  • 您的XPATH需要包含名称空间(“u:”)
  • 文本内容本身就是一个节点,因此需要将
    /text()
    添加到XPATH中

    Dim xdc As New XmlDocument
    xdc.Load("Myfilename.xml")
    Dim strXPATH As String = "/u:Root/u:Body/u:Problems/u:Problem/text()"
    Dim nsmgr As New XmlNamespaceManager(xdc.NameTable)
    nsmgr.AddNamespace("u", xdc.DocumentElement.NamespaceURI)
    Dim xnl As XmlNodeList = xdc.DocumentElement.SelectNodes(strXPATH, nsmgr)
    For Each xnd As XmlNode In xnl
      MsgBox(strXPATH & "=" & xnd.Value)
    Next
    
  • Dim xdc As New XmlDocument
    xdc.Load("Myfilename.xml")
    Dim strXPATH As String = "/u:Root/u:Body/u:Problems/u:Problem/text()"
    Dim nsmgr As New XmlNamespaceManager(xdc.NameTable)
    nsmgr.AddNamespace("u", xdc.DocumentElement.NamespaceURI)
    Dim xnl As XmlNodeList = xdc.DocumentElement.SelectNodes(strXPATH, nsmgr)
    For Each xnd As XmlNode In xnl
      MsgBox(strXPATH & "=" & xnd.Value)
    Next