如何 select 来自 XML 的特定节点

How to select particular node from XML

我有这个XML:

<?xml version="1.0"?>
    <Document xmlns="urn:somethinghere">
        <fapx.001.02>
            <Sts>
                <StsVal>ACCEPTED</StsVal>
            </Sts>
        </fapx.001.02>
    </Document>

我想要 select "StsVal" 的值,为此我编写了这段代码但出现错误:

代码

Dim doc As XmlDocument = New XmlDocument()
doc.Load("myfile.xml")
Dim response As String = doc.SelectSingleNode("Document/fapx.001.02/Sts/StsVal").InnerText

错误

Object reference not set to an instance of an object.

编辑

我知道我收到此错误是由于 Null 值,可能是因为我在 SelectSingleNode 函数中提供的路径不正确。这就是为什么我想知道如何根据给定的 XML.

给出正确的路径

那是因为您的 XML 具有默认命名空间:xmlns="urn:somethinghere"。这个主题(XPath query against XML with default namespace)以前在 SO 中以各种形式被问过很多次。以下是我的回答历史中的一些内容:

  1. Use XPath with XML namespace

这是使用 XPath 和 XmlDocument 查询命名空间中元素的一种可能方法:

Dim nsManager As New XmlNamespaceManager(New NameTable())
nsManager.AddNamespace("d", "urn:somethinghere")

Dim doc As XmlDocument = New XmlDocument()
doc.Load("myfile.xml")
Dim response As String = doc.SelectSingleNode("d:Document/d:fapx.001.02/d:Sts/d:StsVal", nsManager).InnerText

您的问题是您的文档有一个默认命名空间,但 XPath 表达式没有使用它。您可以传入命名空间管理器并使用命名空间的别名,如下所示:

Dim xnm as XmlNamespaceManager = New XmlNamespaceManager( doc.NameTable )
xnm.AddNamespace("ns", "urn:somethinghere")
Dim response As String = doc.SelectSingleNode("ns:Document/ns:fapx.001.02/ns:Sts/ns:StsVal", xnm).InnerText

我的 vb 有点生疏,如果语法需要稍作调整,我们深表歉意,但希望您能理解。 "ns" 是任意的,您可以使用任何您想要的临时前缀。

感觉应该有办法让它识别默认命名空间,但出于某种原因,在它自己上添加文档命名表似乎无法识别它,但给它一个名字会起作用。