如何在lxml中将&lt;转换为<,Python?

4 投票
2 回答
7080 浏览
提问于 2025-04-17 14:30

这里有一个xml文件:

<body>
    <entry>
         I go to <hw>to</hw> to school.
    </entry>
</body>

由于某种原因,我把 <hw> 改成了 &lt;hw&gt;,把 </hw> 改成了 &lt;/hw&gt;,然后用lxml解析器来解析它。

<body>
    <entry>
         I go to &lt;hw&gt;to&lt;/hw&gt; to school.
    </entry>
</body>

但是在修改了解析后的xml数据后,我想要得到的是 <hw> 这个元素,而不是 &lt;hw&gt;。我该怎么做呢?

2 个回答

1

如果你知道哪个元素里面包含了错误转义的内容:

# parse whole document as usual..
# find the entry element..
# parse the fragment
fragment = lxml.fromstring(entry.text)
# (optionally) add the fragment to the tree
entry.text = None
entry.append(fragment)
5

首先,找到一个 unescape 函数:

from xml.sax.saxutils import unescape

entry=body[0]

然后用原来的内容替换掉这个 unescape

body.replace(entry, e.fromstring(unescape(e.tounicode(entry))))

撰写回答