gpt4 book ai didi

德尔福/MSXML : XPath queries fail

转载 作者:行者123 更新时间:2023-12-03 15:26:13 24 4
gpt4 key购买 nike

我已经加载了一个 XML 文档,现在我希望运行 XPath 查询来选择 XML 的某个子集。 XML 是

<?xml version="1.0"?>
<catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
<genre>Computer</genre>
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications with
XML.</description>
</book>
</catalog>

程序大概是这样的

procedure RunXPathQuery(XML: IXMLDOMDocument2; Query: string);
begin

XML.setProperty('SelectionLanguage', 'XPath');

NodeListResult := XML.documentElement.selectNodes(Query));

ShowMessage('Found (' + IntToStr(NodeListResult.length) + ') nodes.');

end;

问题是:当我对上述 XML 运行 XPath 查询“/catalog”时,它返回(如预期)一个包含 1 个元素的节点列表。但是,如果我删除 :xsi<catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>并重新运行查询,返回的节点列表为空。如果我删除整个“xmlns”属性,生成的节点列表将再次包含 1 个元素。

所以我的问题是:我能做些什么来解决这个问题,即如何使 MSXML 返回正确数量的实例(运行 XPath 查询时),而不管 namespace (或其他属性)如何?

谢谢!

最佳答案

参见this link !

当您使用<catalog xmlns='http://www.w3.org/2001/XMLSchema-instance'>时那么整个节点将被移动到不同的(默认)命名空间。您的 XPath 不会在其他 namespace 内查找,因此无法找到任何数据。与<catalog xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>您只是将 xsi 声明为不同的 namespace 。这将是与默认命名空间不同的命名空间。

我现在无法测试它,但添加一些东西 like this可能有帮助:

XML.setProperty('SelectionNamespaces', 'xmlns=''http://www.w3.org/2001/XMLSchema-instance''');

或者也许不是。正如我所说,我现在无法测试它。

关于德尔福/MSXML : XPath queries fail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1519416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com