我在使用带有 XPath 表达式的 Microsoft XML Core Services 6.0 (MSXML) 时遇到了理解问题。我已将问题分解为最简单的情况。因此,让我们采用以下 XML 文件:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<element name="E1A1">
<subEle value="1a"/>
<subEle value="1b"/>
<subEle value="1c"/>
</element>
<element name="E2A1">
<subEle value="2a"/>
<subEle value="2b"/>
<subEle value="3b"/>
</element>
<element name="E3A1">
<subEle value="3a"/>
<subEle value="3b"/>
<subEle value="3c"/>
</element>
</root>
我想获得value
每个“元素”的“”属性。我将使用伪代码来描述我的问题,我将专注于重要的事情,所以我不会写我如何初始化 Msxml2.DOMDocument 变量等。。首先,我得到所有element
具有-属性的“”-节点name
:
oNodeList = oDom.selectNodes("//element[@name]")
selectNodes 语句的结果是一个节点列表,我在 for 循环中逐个节点访问项目。在这个循环中,我执行另一个 selectNodes 语句,这给了我(至少我是这么认为的)subEle
每个“”的“ element
”:
for i from 1 to oNodeList.length
oNodeMain = oNodeList.nextNode()
oNodeResList = oNodeMain.selectNodes("//subEle")
msgInfo("n items", oNodeResList.length)
endFor
问题来了:循环中的 selectNodes 语句似乎在范围内具有所有“subEle”;消息框弹出 3 次,告诉我节点列表的长度是 9。我原以为它会弹出 3 次,每次都告诉我节点列表的长度为 3(因为每个“ element
”正好有 3 个“ subEle
” s),因为我在“”上执行 selectNodes 语句oNodeMain
,它在每个循环中获取下一个节点。也许我只需要在循环中修改 XPath 表达式并且不要使用“ //
”,因为它可以工作,但我不知道为什么。
我为此使用的程序是 Paradox 11,我使用 OLE 的 MSXML。这种行为“正常”吗,我的误解在哪里?欢迎任何有关如何实现我正在尝试的建议。