2017-01-21 72 views
0

更改根我有一個看起來像這樣的文件:在XML的xml.etree

<?xml version="1.0"etc> 
<xliff version="1.2" etc> 
<file datatype="plaintext" mt="eMT-R2" original="" source-language="en-US" target-language="es"> 
<header/> 
<body> 
    <trans-unit etc> 
     <source>blabla</source> 
     <target>blabla</target> 
     <note>blabla</note> 
    </trans-unit> 
</body> 
</file> 
</xliff> 

我想通過源和目標元素。我的代碼僅適用於以<body>作爲根。有沒有辦法跳過文件開頭的前4個元素,或者將根目錄設置爲<body>

import xml.etree.ElementTree as ET 

tree = ET.parse('myfile.xlf') 
root = tree.getroot() 

for trans in root.findall('trans-unit'): 
    source = trans.find('source').text 
    target = trans.find('target').text 
    lencomp = (len(target) - len(source))/len(source)*100.0 
    print(source,">>>", target) 
+1

關於問題寫作的主題...張貼有效的XML意味着我們無需修復它自己可以測試。 – tdelaney

回答

1

ElementTree的findall需要一個準xpath字符串。它不是一個全功能的XPath喜歡的是可用lxml,但適用於你所需要的

import xml.etree.ElementTree as ET 

tree = ET.parse('myfile.xlf') 

for trans in tree.findall('file/body/trans-unit'): 
    source = trans.find('source').text 
    target = trans.find('target').text 
    lencomp = (len(target) - len(source))/len(source)*100.0 
    print(source,">>>", target) 
+0

我得到以下與tree.xpath:AttributeError:'ElementTree'對象沒有屬性'xpath' –

+0

我不好,我想'lxml'不'xml.etree'。我更新了在'findall'中使用xpath。 – tdelaney

+0

謝謝@tdelaney - 我發現問題並在下面發佈了答案 –

0

好了,原來問題不是代碼,但在我的文件。對於任何使用XLIFF文件的人,這可能是有用的:

問題出在「XMLNS」 - 如果至少刪除一個字母,文件將被正確解析。我不知道到底是什麼問題,但改變這無疑解決了這個問題