对节点的XPath查询

时间:2010-09-19 00:27:55

标签: xml xpath libxml2

我应该做错事。在display-name下名为“name”的所有节点的XPath查询是什么?我使用的是libxml2。

<?xml version="1.0" encoding="UTF-8"?>
<description xmlns="http://openoffice.org/extensions/description/2006" xmlns:d="http://openoffice.org/extensions/description/2006"  xmlns:xlink="http://www.w3.org/1999/xlink">
    <version value="2010.05.25" />
    <identifier value="German.frami2006DE.dictionary.from.org.openoffice.de.by.Karl.Zeiler" />
    <display-name>
        <name lang="en">German (DE-frami) spelling, hyphenation, thesaurus</name>
        <name lang="de">Deutsche (DE-frami) Rechtschreibung, Trennung, Thesaurus</name>
    </display-name>
    <platform value="all" />
    <dependencies>
        <OpenOffice.org-minimal-version value="3.0" d:name="OpenOffice.org 3.0" />
    </dependencies>
</description>

2 个答案:

答案 0 :(得分:6)

您的文档有一个默认命名空间,因此您需要在表达式中注册该命名空间。我从未使用过libxml2,但查看他们的examples,看起来您想要的功能是xmlXPathRegisterNs

请注意,注册命名空间时,为XPath表达式选择的前缀不必与文档中使用的前缀(如果有)匹配。由于您的文档使用默认命名空间(不是前缀),因此肯定不会。但是,您仍需要在XPath中使用前缀:

/ns:description/ns:display-name/ns:name

答案 1 :(得分:5)

这是有效的:

xmlXPathRegisterNs(Ctxt, 'ns1', 'http://openoffice.org/extensions/description/2006');
Res := xmlXPathEval('//ns1:name', Ctxt);