我将以下XML返回给我:
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<document xmlns="@link" xmlns:xsi="@link" xsi:schemaLocation="@link" version="1.0">
<field left="0" top="0" right="100" bottom="20" type="text">
<value encoding="utf-16">11266</value>
<line left="8" top="4" right="55" bottom="17">
<char left="8" top="4" right="13" bottom="16" confidence="65" suspicious="true">1</char>
<char left="18" top="4" right="23" bottom="16" confidence="68" suspicious="true">1</char>
<char left="27" top="4" right="35" bottom="16" confidence="100">2</char><char left="36" top="4" right="45" bottom="17" confidence="100">6</char>
<char left="46" top="4" right="55" bottom="16" confidence="100">6</char>
</line>
</field>
</document>
我试图阅读value
节点。我的代码如下所示:
Dim m_xmld = New XmlDocument()
m_xmld.Load(xmlfile)
Return m_xmld.SelectSingleNode("/field/value").InnerText
我做错了什么?我试过/document/field/value
也无济于事(
答案 0 :(得分:0)
尝试从根目录中选择节点,如下所示:
Dim m_xmld = New XmlDocument()
m_xmld.Load(xmlfile)
Return FindNode(m_xmld, "value")
尝试使用此功能搜索节点:
Private Function FindNode(list As XmlNodeList, nodeName As String) As XmlNode
If list.Count > 0 Then
For Each node As XmlNode In list
If node.Name.Equals(nodeName) Then
Return node
End If
If node.HasChildNodes Then
FindNode(node.ChildNodes, nodeName)
End If
Next
End If
Return Nothing
End Function
答案 1 :(得分:0)
您的代码存在两个问题。首先,您需要指定XML命名空间。 XML文档在文档元素(xmlns="@link"
)上包含默认命名空间。这意味着在引用文档中的任何元素时必须显式指定该命名空间。要使用XmlDocument
执行此操作,您需要创建XmlNamespaceManager
并将其传递给select方法。例如:
Dim m_xmld As New XmlDocument()
m_xmld.Load(xmlfile)
Dim nsmgr As New XmlNamespaceManager(m_xmld.NameTable)
nsmgr.AddNamespace("x", "@link")
return m_xmld.SelectSingleNode("/x:document/x:field/x:value", nsmgr).InnerText
或者,如果您不想对命名空间URI进行硬编码,您可以从加载的文档中抓取它,如下所示:
nsmgr.AddNamespace("x", m_xmld.DocumentElement.NamespaceURI)
第二个问题是您尝试选择/field/value
而不是/document/field/value
。当您从XmlDocument
对象本身进行选择时,选择从文档的根开始(文档元素“上方”)。