考虑这个 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
您应该获得相同Name
的ResourceInfo
的Seq
。
关于python - 当使用 XPath 选择另一个节点时,如何引用当前节点的子节点的值? (DDEX相关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14905263/