代码之家  ›  专栏  ›  技术社区  ›  Eduardo Mauro

节点的xpath查询

  •  3
  • Eduardo Mauro  · 技术社区  · 15 年前

    我应该做错事。显示名称下名为“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 回复  |  直到 15 年前
        1
  •  6
  •   Mads Hansen    15 年前

    您的文档有一个默认名称空间,因此需要在表达式中注册该名称空间。我从未使用过 libxml2 但是看看他们 examples ,您想要的函数似乎是 xmlXPathRegisterNs

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

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

        2
  •  5
  •   Eduardo Mauro    15 年前

    以下是有效的方法:

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