【问题标题】:Issue in reading text in XML using python使用 python 读取 XML 文本的问题
【发布时间】:2018-02-23 13:58:07
【问题描述】:

我正在尝试读取以下具有以下内容的 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

有人可以解释为什么只显示部分 seg 吗?

【问题讨论】:

    标签: python xml parsing lxml


    【解决方案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())
    

    【讨论】:

      【解决方案2】:

      您需要注意tail 属性,它是元素结束标记之后的文本。这里解释得很好:http://infohost.nmt.edu/tcc/help/pubs/pylxml/web/etree-view.html

      “Denver”是第一个 &lt;ut&gt; 元素的 tail,“Score”是第二个 &lt;ut&gt; 元素的 tail。这些字符串不是&lt;seg&gt; 元素的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()))
        

      【讨论】:

        猜你喜欢
        • 2013-09-13
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        相关资源
        最近更新 更多