Nokogiri XML XPath不选择OpenXML Relationships文件中的节点

时间:2013-06-17 01:00:16

标签: ruby xml nokogiri openxml

我正在尝试查询OpenXML presentationML格式中包含的以下样本关系XML文件的节点。

<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships">
    <Relationship Target="../notesSlides/notesSlide1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/notesSlide" Id="rId2"/>
    <Relationship Target="../slideLayouts/slideLayout2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout" Id="rId1"/>
    <Relationship Target="../media/image00.jpg" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image" Id="rId3"/>
</Relationships>

我想要的是为关系节点选择属性@Target,Id =“rId3”。无论我传递什么XPath选择器,结果节点集都是空的。任何人都可以帮助解决这个谜团吗?

2 个答案:

答案 0 :(得分:1)

这是一个非常简单的问题,但由于你没有展示你的作品,我只是简单地给你一个答案而犹豫不决。

相反,这里有一些基本的构建块,不使用XPath,它可以工作,但使用CSS会更具可读性:

at方法在文档中搜索第一次出现的选择器。这使用CSS选择器来查找第一个<Relationship>节点:

at('Relationship')

在CSS中,您可以轻松地使用其ID找到特定节点:

at('#rId3')

使用可在整个互联网上使用的常规CSS规则,您可以将这些规则组合在一起以查找所需的节点。理解HTML以及CSS如何使用选择器访问节点是必不可少的,但是一旦你知道它让生活变得更容易。

答案 1 :(得分:1)

神秘之处在于你忘记了命名空间:

doc.at('//Relationship[@Id="rId3"]')[:Target]

失败,因为它查找没有命名空间的元素

doc.at('//xmlns:Relationship[@Id="rId3"]')[:Target]

作品