请假设以下实际 XML 结构(不,我们无法更改)。
<root>
<master>
<record>
<ID>1</ID>
<Value>One</Value>
</record>
<record>
<ID>2</ID>
<Value>Two</Value>
</record>
</master>
<detail>
<record>
<ID>A</ID>
<MasterID>1</MasterID>
<Value>Somevalue a</Value>
</record>
<record>
<ID>B</ID>
<MasterID>2</MasterID>
<Value>Somevalue b</Value>
</record>
<record>
<ID>C</ID>
<MasterID>1</MasterID>
<Value>Somevalue c</Value>
</record>
<record>
<ID>D</ID>
<Value>Somevalue d</Value>
</record>
</detail>
</root>
首先,我们对 XML 执行 XPath 查询以返回可能的详细记录列表:
detailnodes = doc.documentElement.getElementsByTagName('/root/detail')
然后我们在返回 XML 节点列表中处理每个返回的详细记录,此时我们只需要使用 XPath 表达式根据详细节点中的 MasterID 获取主记录的值。我们不想使用应用程序代码来检索当前记录的 MasterID,然后根据检索到的值创建 XPath 表达式
示例(不是这样的)
for each detailnode in detailnodes do
masterID = detailnode.ChildNodes['MasterID'].value
masterValue = detailnode.selectNodes('../master[ID=" + MasterID + "]/Value')[0].value
end
示例(首选方式)
for each detailnode in detailnodes do
masterValue = detailnode.selectNodes('../master[ID=?MasterID?]/Value')[0].value
end
XPath中的?MasterID?
表达式应该返回当前详细节点的 MasterID 值。
这甚至可能使用纯 XPath 表达式......?
编辑 注意:我需要使用 MSXML DOM 来完成这项工作......