问题在使用python
问题描述:
我想读下面的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的一部分?
答
你需要知道的tail
属性,这是跟在元素的结束标记后面的文本。这里解释得很好:http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html。
“丹佛”是第一<ut>
元件和“分数”的tail
是第二<ut>
元件的tail
。这些字符串不是<seg>
元素的text
的一部分。
除了由kgbplus(这既ElementTree的和LXML作品)提供的解决方案,LXML你也可以使用下面的方法来获取想要的输出:
-
for n in seg: print("".join(n.xpath("text()")))
-
for n in seg: print("".join(n.itertext()))
答
可以使用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())