- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经加载了一个 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/
我是一名优秀的程序员,十分优秀!