DDEX 標準の単純化されたバージョンである、次の XML 構造について考えてみましょう。
<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>
各トラック ノードの Name のテキスト値に一致する子を持つResourceInfo ノードを選択し<Name>
て、Seq 番号を取得したいと思います。
各トラックの lxml ツリーを取得し、次<ResourceInfo>
のように明示的にリクエストすることで、直接行うことができます。
track.xpath('/doc/master/ResourceInfo/Seq[../Name[text()="Foo"]]')
しかし、それは私が各トラックの名前を知っていて、事前に明示的に述べることができることを前提としています. これをばかげてマップし、xpath の「Foo」text()
を現在のトラックのリソースの名前への参照に置き換えることができるようにしたいと考えています。
text()
これは、master の Name のトラックとリソースtext()
を各トラックの Name に結合するようなものです。XPathでこれを行う簡単な方法はありますか?
各トラックを反復処理し、トラックから Seq を取得しようとしています。したがって、「Foo」を明示的に要求することはできません。私は内省する必要があります - 「現在のノードと<Name>
一致する値を持つマスターのノードの兄弟である Seq を教えてください」.<Name>
<track>