假设我需要根据多个标准(书的标题,书的主题,书的作者,书的价格......)选择节点列表,每个标准可能涉及选择多个值中的任何一个(主题是泰国,金融,历史之一;作者是Bob,Ted,Carol,Alice)之一
生成的XPath查询可能很长,而且语法相当复杂。可以进行初始查询(例如,仅考虑主题),生成节点列表,然后应用第二个XPath查询,以将节点列表缩短为更短,而不是在单个传递中执行查询列出?
在我看来答案是否定的,因为selectNodes方法不能应用于初始结果的IXMLDOMNodeList对象。我错过了什么吗?有没有办法做到这一点?
[问题的背景是:向用户呈现表单,以选择报告生成器的标准。用户可以选择具有不同细节程度的一个或多个标准。 将所有选定的标准组合到单个XPath查询中变得相当繁琐,特别是因为不同的标准出现在树的不同级别。]
如果可能,迭代应用标准将大大降低复杂性。
答案 0 :(得分:0)
XPath查询可以应用于单个IXMLDOMNode,以使用该节点作为起点获取新的节点列表,但正如您所发现的,您无法直接将XPath应用于IXMLNDOMNodeList。
解决这个问题的方法之一是:
然而,这可能会变得非常低效。
我认为har07建议使用字符串构建XPath是一个非常好的建议。没有理由比你想做的更复杂。您可以简单地一步一步,并为每个过滤器使用单独的谓词。
从你的主路径开始(在这里使用伪代码而不是实际的VBA):
string path = "/my/node/path"
然后逐个添加过滤器:
if (filtering by author) {
path += "[author = 'Bob' or author = 'Ted']" // <- build this up dynamically
}
if (filtering by subject) {
path += "[subject = 'Thailand' or subject = 'Finance']"
}
IXMLDOMNodeList nodes = document.selectNodes(path)