如何使用 XPath 按名称高效地 select 子元素?
How can I efficiently select child elements by name, using XPath?
我有一个遗留的 VB6 程序,需要解析 XML。通过阅读这个优秀站点中的几个相关主题,我发现使用 MSXML dll 是加载 XML 并能够解析它的方法。我也曾尝试浏览 MSDN MSXML 文档来找到我的答案,但发现很难。我觉得答案很简单,但一些指示会大有帮助。
例如,这是我的 XML 结构的要点:
<response>
<header>
: :
</header>
<result>
<record>
<data1>some text</data1>
<data2>some text</data2>
: :
<dataN>some text</dataN>
</record>
: : multiple records with data
</result>
</response>
我想处理所有记录,并从每个记录中按名称提取某些数据子项。
我知道如何从文档中获取 IXMLDOMNodeList 以获取记录,但不确定在每条记录上按名称获取数据行的最佳方式。这是我的 VB6 代码。
Dim doc as New MSXML2.DOMDocument
if doc.Load(myURL) Then
Dim nodeList as MSXML2.IXMLDOMNodeList, node as MSXML2.IXMLDOMNode
Set nodeList = doc.selectNodes("/response/result/record")
For Each node in nodeList
'How do I get the child element with name "data2" from the list of children?
Next node
end if
在每个记录的 For/Each 循环中,我想访问名称为 "dataN" 的子元素,例如。我知道我可以遍历 node.childNodes 并检查是否 childNode(i).baseName = "dataN",但这似乎效率不高。但是我似乎找不到一种方法可以让我通过名称找到这些子节点。
正如我所说,可能是一个简单的答案,但我似乎无法从本网站或 MSXML 文档中的类似帖子中找到最佳实践。
谢谢。
继续使用 XPath,例如For Each
中的 node.selectSingleNode("data2").text
为您提供了一个包含 data2
元素文本内容的字符串。
我有一个遗留的 VB6 程序,需要解析 XML。通过阅读这个优秀站点中的几个相关主题,我发现使用 MSXML dll 是加载 XML 并能够解析它的方法。我也曾尝试浏览 MSDN MSXML 文档来找到我的答案,但发现很难。我觉得答案很简单,但一些指示会大有帮助。
例如,这是我的 XML 结构的要点:
<response>
<header>
: :
</header>
<result>
<record>
<data1>some text</data1>
<data2>some text</data2>
: :
<dataN>some text</dataN>
</record>
: : multiple records with data
</result>
</response>
我想处理所有记录,并从每个记录中按名称提取某些数据子项。
我知道如何从文档中获取 IXMLDOMNodeList 以获取记录,但不确定在每条记录上按名称获取数据行的最佳方式。这是我的 VB6 代码。
Dim doc as New MSXML2.DOMDocument
if doc.Load(myURL) Then
Dim nodeList as MSXML2.IXMLDOMNodeList, node as MSXML2.IXMLDOMNode
Set nodeList = doc.selectNodes("/response/result/record")
For Each node in nodeList
'How do I get the child element with name "data2" from the list of children?
Next node
end if
在每个记录的 For/Each 循环中,我想访问名称为 "dataN" 的子元素,例如。我知道我可以遍历 node.childNodes 并检查是否 childNode(i).baseName = "dataN",但这似乎效率不高。但是我似乎找不到一种方法可以让我通过名称找到这些子节点。
正如我所说,可能是一个简单的答案,但我似乎无法从本网站或 MSXML 文档中的类似帖子中找到最佳实践。
谢谢。
继续使用 XPath,例如For Each
中的 node.selectSingleNode("data2").text
为您提供了一个包含 data2
元素文本内容的字符串。