0

我正在尝试查询 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 选择器,生成的节点集都是空的。谁能帮忙解开这个谜?

4

2 回答 2

1

奥秘在于你忘记了命名空间:

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

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

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

作品

于 2013-06-17T01:47:18.433 回答
1

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

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

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

at('Relationship')

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

at('#rId3')

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

于 2013-06-17T01:20:19.470 回答