2017-08-14 152 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) 

產量爲

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

''{甕:綠洲:名稱: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()

下工作(在XML樣本中,該segment元素是xliff兒):

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顯然更復雜(segment不是xliff直接孩子)。然後,你需要添加.//搜索整個樹:

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