Ruby nokogiri中XPath的替代语法,解析ODF

Ruby nokogiri中XPath的替代语法,解析ODF,ruby,xml,xpath,nokogiri,odf,Ruby,Xml,Xpath,Nokogiri,Odf,我有一个非常简单的ODF文档,我想用nokogiri解析它 XML如下所示: <office:body> <office:text> <text:sequence-decls> ... </text:sequence-decls> <text:section text:name="categorylevel1" text:style-name="Sect1"> <text:p

我有一个非常简单的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下不接受(抛出一个语法错误)。显然,该库的Java版本不支持名称空间属性

是否有其他方式参考文件的章节?例如,仅使用
text:name
属性?有没有办法忽略名称空间?该节的
text:name
属性值对于整个文档是唯一的,因此不存在遗漏引用的问题

“是否有其他方法引用文档的节?例如,仅使用text:name属性?”

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

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

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

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

谢谢你的例子。第二条路成功了!然而,第一个也抛出了一个语法错误。Java中对名称空间的支持必须非常有限。
.//*[@*[local-name()='name' and .='categorylevel1']]