0

我有一些 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>

我正在尝试使用 XPath 将“token”的值转换为字符串。简单吧。但我能做到吗?

Dim doc As New XmlDocument
doc.Load(url)   'gets the XML above.

Dim xmlNav As XPathNavigator

Dim xmlNI As XPathNodeIterator

xmlNav = doc.CreateNavigator()

xmlNI = xmlNav.Select("token")

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

4

3 回答 3

1

XPathNodeIterator 类提供了一组可以迭代的选定节点。您的代码有两个问题。

首先,您的 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 循环:

For Each node As XPathNavigator In xmlNI
    ' value of the node can be accessed by node.Value
Next

如果您可以使用 LINQ to XML,那就更简单了(您需要添加对System.Xml.Linqvia的引用Imports System.Xml.Linq):

Dim xml As XElement = XElement.Load(url)

Dim auth As String = xml.Descendants("token").FirstOrDefault()
于 2013-04-19T16:30:08.253 回答
0

你一定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
于 2013-04-19T16:06:26.570 回答
0

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
于 2013-04-19T20:58:29.267 回答