【问题标题】:Alternative Syntax for an XPath in nokogiri, parsing an ODFnokogiri 中 XPath 的替代语法,解析 ODF
【发布时间】:2014-12-22 13:17:32
【问题描述】:

我有一个非常简单的 ODF 文档,我想用 nokogiri 解析它。

XML 如下所示:

<office:body>
<office:text>
    <text:sequence-decls>
        ...
    </text:sequence-decls>
    <text:section text:name="categorylevel1" text:style-name="Sect1">
        <text:p text:style-name="Title">[CATEGORY_LEVEL_1_NAME]</text:p>
    </text:section>
</office:text>

目前我正在尝试选择文档的categorylevel1 部分。我使用的库会自动生成 XPath 并生成
".//text:section[@text:name='categorylevel1']"
哪个是对的。现在问题是库(nokogiri)似乎在 MRI 下接受这条路径,但在 JRuby 下不接受(抛出 SyntaxError)。显然 Java 版本的库不支持命名空间属性。

是否有替代方法来引用文档的部分?例如仅使用text:name 属性?有没有办法忽略命名空间?该部分的text:name 属性值对于整个文档将是唯一的,因此错误引用不会成为问题。

【问题讨论】:

    标签: ruby xml xpath nokogiri odf


    【解决方案1】:

    “是否有替代方法来引用文档的部分?例如仅使用 text:name 属性?”

    您可以使用* 忽略元素名称,这样您就可以通过使用 text:name 属性来引用元素:

    .//*[@text:name='categorylevel1']
    

    “有没有办法忽略命名空间?”

    您可以使用local-name() 忽略命名空间。例如,通过text:name 属性值过滤元素,同时忽略属性的命名空间:

    .//*[@*[local-name()='name' and .='categorylevel1']]
    

    【讨论】:

    • 感谢您提供的示例。第二条路径完成了工作!然而,第一个也会引发语法错误。 Java 中对命名空间的支持必须非常有限。
    猜你喜欢
    • 2013-03-21
    • 1970-01-01
    • 2010-11-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多