2017-09-14 40 views
0

我想讀下面的XML文件中的XML文本閱讀它具有以下內容:問題在使用python

<tu creationdate="20100624T160543Z" creationid="SYSTEM" usagecount="0"> 
    <prop type="x-source-tags">1=A,2=B</prop> 
    <prop type="x-target-tags">1=A,2=B</prop> 
    <tuv xml:lang="EN"> 
     <seg>Modified <ut x="1"/>Denver<ut x="2"/> Score</seg> 
    </tuv> 
    <tuv xml:lang="DE"> 
     <seg>Modifizierter <ut x="1"/>Denver<ut x="2"/>-Score</seg> 
    </tuv> 
    </tu> 

使用下面的代碼

tree = ET.parse(tmx) 
root = tree.getroot() 
seg = root.findall('.//seg') 
for n in seg: 
    print(n.text) 

它給了以下的輸出:

Modified 
Modifizierter 

我所期待是

Modified Denver Score 
Modifizierter Denver -Score 

有人可以解釋爲什麼只顯示seg的一部分?

回答

1

你需要知道的tail屬性,這是跟在元素的結束標記後面的文本。這裏解釋得很好:http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html

「丹佛」是第一<ut>元件和「分數」的tail是第二<ut>元件的tail。這些字符串不是<seg>元素的text的一部分。

除了由kgbplus(這既ElementTree的和LXML作品)提供的解決方案,LXML你也可以使用下面的方法來獲取想要的輸出:

  1. xpath()

    for n in seg: 
        print("".join(n.xpath("text()"))) 
    
  2. itertext()

    for n in seg: 
        print("".join(n.itertext())) 
    
1

可以使用tostring功能:

tree = ET.parse(tmx) 
root = tree.getroot() 
seg = root.findall('.//seg') 
for n in seg: 
    print(ET.tostring(n, method="text")) 

在你的情況下得到的字符串可能包含不必要的符號,這樣你就可以修改最後一行:

print(ET.tostring(n, method="text").strip())