【问题标题】:Nokogiri XML XPath does not select nodes in OpenXML Relationships fileNokogiri XML XPath 不选择 OpenXML 关系文件中的节点
【发布时间】: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 选择器”,但显然你做的不对,所以向我们展示你的尝试,以便我们更正你的工作。

标签: ruby xml nokogiri openxml


【解决方案1】:

这是一个非常简单的问题,但因为你没有展示你的作品,所以我很犹豫是否简单地给你一个答案。

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

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

at('Relationship')

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

at('#rId3')

使用在 Internet 上可用的常规 CSS 规则,您可以将这些规则组合起来以找到您想要的节点。了解 HTML 以及 CSS 如何使用选择器访问节点非常重要,但是一旦您知道它会让生活变得更轻松。

【讨论】:

    【解决方案2】:

    谜团在于你忘记了命名空间:

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

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

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

    作品

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      • 2011-06-29
      • 2020-05-10
      • 1970-01-01
      • 2014-04-08
      相关资源
      最近更新 更多