python - 当使用 XPath 选择另一个节点时,如何引用当前节点的子节点的值? (DDEX相关)

标签 python xml xpath ddex

考虑这个 XML 结构,DDEX 标准的简化版本:

<doc>
<master>
 <ResourceInfo>
  <Name>Foo</Name>
  <Seq>1</Seq>
 </ResourceInfo>
 <ResourceInfo>
  <Name>Bar</Name>
  <Seq>2</Seq>
 </ResourceInfo>
</master>
<track>
 <Resource>
  <Name>Foo</Name>
 </Resource>
</track>
<track>
 <Resource>
  <Name>Bar</Name>
 </Resource>
</track>
</doc>

我想选择 <master> 中的 ResourceInfo 节点带着 child <Name>匹配每个track节点的Name的文本值,得到Seq号。

我可以通过获取每个轨道的 lxml 树并显式请求 <ResourceInfo> 来直接做到这一点是这样的:

track.xpath('/doc/master/ResourceInfo/Seq[../Name[text()="Foo"]]')

但这假设我知道每首轨道的名称并且可以提前明确说明。我希望能够愚蠢地映射它,并以某种方式替换 xpath 中的“Foo”,并引用名称 text()当前轨道的资源。

这有点像加入 text() 上的轨道和资源master 中名称的 text()每个轨道中的名称。有没有一种简单的方法可以使用 XPath 来做到这一点?

我正在尝试迭代每个轨道,并从轨道中提取 Seq。因此,我不能明确要求“Foo”。我需要反省 - “给我一个 Seq,它是 master 中 <Name> 节点的兄弟节点,其值与 <Name> 中当前节点的 <track> 匹配”。

最佳答案

我不确定我是否完全理解,但当前上下文是否是:

/doc/track/Resource/Name

并且您使用以下 XPath:

/doc/master/ResourceInfo[Name = current()]/Seq

您应该获得相同NameResourceInfoSeq

关于python - 当使用 XPath 选择另一个节点时,如何引用当前节点的子节点的值? (DDEX相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905263/

相关文章:

python - 检查从 GEOS C 函数返回的几何时遇到错误

Python:查找 URL 并添加查询字符串对

c# - 多少数据对于 XML 文件来说太多了?有哪些基于文件的数据库替代方案?

javascript - Objective-C/Swift 正则表达式跨多行匹配

python - 训练神经网络的问题

java - XStream - 解析嵌套元素(跳过父元素)

xml - 使用 XSLT 转换 XML

xpath - 在 Xpath 中使用通配符和属性

xml - 如何在bash中乘以xml

loops - 无法遍历包含XPath的文件