如何使用XPath按名称有效地选择子元素?

时间:2017-01-13 16:20:23

标签: xml xpath vb6 msxml

我有一个遗留的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文档中的类似帖子找到最佳实践。

感谢。

1 个答案:

答案 0 :(得分:2)

继续使用XPath,例如node.selectSingleNode("data2").text内的For Each为您提供了一个包含data2元素文本内容的字符串。