使用 python 阅读 XML 中的文本时出现问题
Issue in reading text in XML using python
我正在尝试阅读以下 XML 文件,其中包含以下内容:
<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
有人能解释一下为什么只显示部分段吗?
您可以使用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())
您需要了解 tail
property, which is the text that follows an element's end tag. It is explained well here: http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html。
"Denver" 是第一个 <ut>
元素的 tail
,“Score”是第二个 <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()))
我正在尝试阅读以下 XML 文件,其中包含以下内容:
<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
有人能解释一下为什么只显示部分段吗?
您可以使用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())
您需要了解 tail
property, which is the text that follows an element's end tag. It is explained well here: http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html。
"Denver" 是第一个 <ut>
元素的 tail
,“Score”是第二个 <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()))