2017-08-14 9 views
2

私はxliffファイルを読んでおり、特定の要素を取得しようとしています。私が使用しているすべての要素を印刷しようとしたPython -lxml xpathは空のリストを返します

from lxml import etree 
with open('path\to\file\.xliff', 'r',encoding = 'utf-8') as xml_file: 
     tree = etree.parse(xml_file) 
    root = tree.getroot() 
for element in root.iter(): 
     print("child", element) 

出力I(ここでは、多くの記事の助けを借りて)特定の要素を取得しようとすると

child <Element {urn:oasis:names:tc:xliff:document:2.0}segment at 0x6b8f9c8> 
child <Element {urn:oasis:names:tc:xliff:document:2.0}source at 0x6b8f908> 

だった - ソースタグ

segment = tree.xpath('{urn:oasis:names:tc:xliff:document:2.0}segment') 
print(segment) 

空のリストを返します。誰かが適切にそれを取得する方法を教えてもらえますか?

入力:

<?xml version='1.0' encoding='UTF-8'?> 
<xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0"> 

    <segment id = 1> 
    <source> 
     Hello world 
    </source> 
    </segment> 
    <segment id = 2 > 
    <source> 
     2nd statement 
     </source> 
    </segment> 
</xliff> 

私はセグメントの値と、それに対応するソース

+0

' '{URN:オアシス:名:TC:XLIFF:ドキュメント:2.0} segment''は' XPath'表現 – Andersson

+0

@Anderssonではありません。そして、あなたは、ツリー全体を検索する.//を追加する必要がありますしようとしましたtree.findall( '{urn:oasis:names:tc:xliff:document:2.0} segment') - まだ空リストを返す – shan

+1

HTMLソースサンプルと所望の出力を共有する – Andersson

答えて

0

このコードを取得したいが、

tree.xpath('{urn:oasis:names:tc:xliff:document:2.0}segment') 

はlxmlの(「lxml.etreeによって受け付けられません。 XPathEvalError:無効な式 ")。 findall()を使用する必要があります。

from lxml import etree 

tree = etree.parse("test.xliff") # XML in the question; ill-formed attributes corrected 
segment = tree.findall('{urn:oasis:names:tc:xliff:document:2.0}segment') 
print(segment) 

しかし、実際のXMLは明らかに、より複雑である(segmentxliffの直接の子ではありません):

次の作品は(XMLのサンプルでは、​​segment要素はxliffの子です)。

segment = tree.findall('.//{urn:oasis:names:tc:xliff:document:2.0}segment') 
関連する問題