Asp.net 通过xpath返回单属性值

Asp.net 通过xpath返回单属性值,asp.net,xml,vb.net,xpathnavigator,Asp.net,Xml,Vb.net,Xpathnavigator,我有一些XML <?xml version="1.0" encoding="utf-8"?> <rsp stat="ok"> <auth> <token>123456</token> <perms>write</perms> <user nsid="74461753@N03" username="user" fullname="name" /> </auth>

我有一些XML

<?xml version="1.0" encoding="utf-8"?>
<rsp stat="ok">
  <auth>
    <token>123456</token>
    <perms>write</perms>
    <user nsid="74461753@N03" username="user" fullname="name" />
  </auth>
</rsp>

如何将“123456”输出到变量中?

是否需要
XPathNavigator
?我是这样得到的:

Dim list As Xml.XmlNodeList = doc.SelectNodes("rsp/auth/token")
If list IsNot Nothing And list.Count > 0 Then
    Dim myValue As String = list(0).FirstChild.Value
    Console.WriteLine(myValue) 'prints 123456'
End If
提供一组可以迭代的选定节点。您的代码有两个问题

首先,XPath不正确-它应该是“/rsp/auth/token”,而不是“token”

其次,您需要迭代返回的集合(在本例中,您只得到一个节点)。您可以通过以下两种方式之一执行此操作:

xmlNI = xmlNav.Select("/rsp/auth/token")
xmlNI.MoveNext()
Dim selectedNode As XPathNavigator = xmlNI.Current
' value of the node can be accessed by selectedNode.Value
或者,您可以为每个循环使用一个:

For Each node As XPathNavigator In xmlNI
    ' value of the node can be accessed by node.Value
Next
如果您可以使用LINQ to XML,这就更简单了(您需要通过
Imports System.XML.LINQ
添加对
System.XML.LINQ
的引用):


XmlDocument包含根据XPath获取元素的方法

Dim doc As New XmlDocument
doc.Load(url)

Dim TokenElement As XmlElement = doc.DocumentElement.SelectSingleNode("auth/token/text()")

If(Not(TokenElement Is Nothing)) Then 'XmlNode.SelectSingleNode(String) can be Nothing if the expression finds no node
    Dim strValue As String = TokenElement.Value
End If

我已经编辑了你的标题。请看,“,其中的共识是“不,他们不应该”。这看起来很有希望,但它没有抓住它。auth/token/text()是正确的表示法吗?使用
doc.DocumentElement
可以获得根标记
。因此,您可以使用给定的符号获得
值。也可以使用
doc.SelectSingleNode(“rsp/auth/token/text()”)
获得相同的结果。我更喜欢第一个符号,因为我不知道根标记的名称。我的答案只给出
标记的第一次出现。如果你想在这个结构中有所有的标记,你可以在doc.DocumentElement中以字符串的形式对所有找到的
值进行循环。选择节点(“auth/token/text()”)对下一个
值进行处理。很好,很简单,很真实。但我得到“类型‘Xml.XmlNodeList’未定义。”
Dim xml As XElement = XElement.Load(url)

Dim auth As String = xml.Descendants("token").FirstOrDefault()
Dim doc As New XmlDocument
doc.Load(url)

Dim TokenElement As XmlElement = doc.DocumentElement.SelectSingleNode("auth/token/text()")

If(Not(TokenElement Is Nothing)) Then 'XmlNode.SelectSingleNode(String) can be Nothing if the expression finds no node
    Dim strValue As String = TokenElement.Value
End If