ノードに同じサブ構造を持つ2つの子ノードがあるXMLファイル(実際にはxliffファイル)があります(これは先験的にはわかりませんが、非常に複雑で、それぞれ<trans-unit>
に対して変更されます) 。私はPythonとlxmlのライブラリ...例で働いている:あなたが見ることができるようにxpathで対応するXMLノードを取得
<trans-unit id="tu4" xml:space="preserve">
<seg-source>
<mrk mid="0" mtype="seg">
<g id="1">...</g>
<g id="2">...</g>
<g id="3">...</g>
<bx id="7"/>...
</mrk>
<mrk mid="1" mtype="seg">...</mrk>
<mrk mid="2" mtype="seg">...
<ex id="7"/>
<g id="8"> FROM HERE </g>
</mrk>
</seg-source>
<target xml:lang="en">
<mrk mid="0" mtype="seg">
<g id="1">...</g>
<g id="2">...</g>
<g id="3">...</g>
<bx id="7"/>...
</mrk>
<mrk mid="1" mtype="seg">...</mrk>
<mrk mid="2" mtype="seg">...
<ex id="7"/>
<g id="8"> TO HERE </g>
</mrk>
</target>
</trans-unit>
、2つのノード<seg-source>
と<target>
がまったく同じサブ構造を有しています。私の目標は、<seg-source>
の各ノードに移動し、そのノードのテキストと尾を取得して(そして私はxpathでそれを行う方法を知っています)、それらを翻訳し、最後に(これは私が何をするかわからない) <target>
の対応するノードに割り当てます。
他の言葉では...私はノード "ここから"を得ると仮定します...ノードを "ここに"取得するにはどうすればいいですか?
from lxml import etree
tree = etree.fromstring(x)
nodes = iter(tree.xpath("//*[self::seg-source or self::target]"))
for seq, tar in zip(nodes, nodes):
# each node will be the matching nodes from each seq-source and target
print(seq.xpath(".//*"))
print(tar.xpath(".//*"))
を任意の2つだけがありますので、各trans-unit
あなただけnodes = iter(tree.xpath("//trans-unit/*"))
を使用することができます/:あなたがそれらをペアにしたい場合は、それぞれのマッチングコードにアクセスできるように
手で行う必要がある理由はありますか?すでにPythonに存在するXLIFFの実装を見てきましたか? (例えば、[翻訳ツールキット]の 'xliff'モジュール(https://github.com/translate/translate/tree/master/translate/misc) –