Nokogiri XML XPath 不选择 OpenXML 关系文件中的节点
Posted
技术标签:
【中文标题】Nokogiri XML XPath 不选择 OpenXML 关系文件中的节点【英文标题】:Nokogiri XML XPath does not select nodes in OpenXML Relationships file 【发布时间】:2013-06-17 01:00:16 【问题描述】:我正在尝试查询 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>
我想要的是为 Id="rId3" 的关系节点选择属性@Target。无论我通过什么 XPath 选择器,生成的节点集都是空的。谁能帮忙解开这个谜团?
【问题讨论】:
你尝试过什么样的选择器?你说“不管我通过什么 XPath 选择器”,但显然你做的不对,所以向我们展示你的尝试,以便我们更正你的工作。 【参考方案1】:这是一个非常简单的问题,但因为你没有展示你的作品,所以我很犹豫是否简单地给你一个答案。
相反,这里有一些基本的构建块,不是使用 XPath,它会起作用,而是使用 CSS,它会更具可读性:
at
方法在文档中搜索第一次出现的选择器。这使用 CSS 选择器来查找第一个 <Relationship>
节点:
at('Relationship')
在 CSS 中,您可以使用其 ID 轻松找到特定节点:
at('#rId3')
使用在 Internet 上可用的常规 CSS 规则,您可以将这些规则组合起来以找到您想要的节点。了解 html 以及 CSS 如何使用选择器访问节点非常重要,但是一旦您知道它会让生活变得更轻松。
【讨论】:
【参考方案2】:谜团在于你忘记了命名空间:
doc.at('//Relationship[@Id="rId3"]')[:Target]
失败,因为它寻找没有命名空间的元素
doc.at('//xmlns:Relationship[@Id="rId3"]')[:Target]
作品
【讨论】:
以上是关于Nokogiri XML XPath 不选择 OpenXML 关系文件中的节点的主要内容,如果未能解决你的问题,请参考以下文章
为啥 .css 可以处理这个 Nokogiri 对象而不是 XPath? [复制]
使用Savon和Nokogiri在Rails中解析XML SOAP响应的内存不足
是否有类似于 lxml 或 nokogiri 的 Java 库? [关闭]