xml - 使用 selectSingleNode 选择节点后如何迭代节点的子节点

标签 xml vba msxml

我试图从 XML 文档中选择一个节点 selectSingleNode()然后使用 selectNodes在该节点上进一步选择该节点的子项:

option explicit

sub main() ' {

   dim doc as new MSXML2.DOMDocument

   doc.loadXML(                                                                                     _
     "<items>"                                                                                    & _
     "  <item id='1000'><name val='ABC'/><name val='DEF'/><name val='GHI'/><foo>xxx</foo></item>" & _
     "  <item id='1001'><name val='JKL'/><name val='MNO'/><name val='PQR'/><bar>yyy</bar></item>" & _
     "  <item id='1002'><name val='STU'/><name val='VWX'/><name val='YZ.'/><baz>zzz</baz></item>" & _
     "</items>")

    dim item as msxml2.IXMLDOMElement
    set item = doc.selectSingleNode("//item[@id='1002']")

    dim names as msxml2.IXMLDOMSelection
    set names = item.selectNodes("//name")

    dim name as msxml2.IXMLDOMElement
    for each name in names
        debug.print(name.getAttribute("val"))
    next name

end sub ' }

我预计这段代码会打印属性值 STU , VWXYZ. 。但是,当运行它时,它会打印每个 <name>val值。

显然,selectNodes()从根文档中选择所有节点。

我不明白为什么会这样,以及如何获取先前选择的节点的真实子节点。

最佳答案

改变

Set names = item.selectNodes("//name")

Set names = item.SelectNodes("name")

关于xml - 使用 selectSingleNode 选择节点后如何迭代节点的子节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54036433/

相关文章:

安卓,布局 : How do I get my button to overlay existing layout in axml?

c++ - 无法在 C++ 中使用 MSXML 从子节点获取值

inno-setup - 如何在 Inno Setup 中检查是否安装了 MSXML 4.0?

c++ - XSLT 中的 MSXML 有多好?

java - android 上的 saxParser 有错误(格式不正确(无效 token ))

xml - xbrl us gaap contextRef 标准?

android - 如何在android中为每个seekbar间隔设置文本?

Excel VBA/Formula 查找包含搜索词的单元格?

xml - 在 Excel 中使用 VBA 获取 XML 属性

excel - 如何获取工作表中形状的相对位置