我正在尝试查询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选择器,结果节点集都是空的。任何人都可以帮助解决这个谜团吗?
答案 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]
作品