首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lxml : Ampersand (文本)

Lxml : Ampersand (文本)
EN

Stack Overflow用户
提问于 2015-04-28 14:54:34
回答 1查看 2.1K关注 0票数 2

我在使用lxml时遇到了问题

我使用lxml解析一个xml文件,并再次将它写回一个新的xml文件。

输入文件:

代码语言:javascript
复制
<tag1>
  <tag2 attr1="a1">&quot; example text &quot;</tag2>
  <tag3>
    <tag4 attr2="a2">&quot; example text &quot;</tag4>
    <tag5>
      <tag6 attr3="a3">&apos; example text &apos;</tag6>
    </tag5>
  </tag3>
</tag1>

脚本:

代码语言:javascript
复制
    from lxml import etree
    parser = etree.XMLParser(remove_comments=False,strip_cdata=False,resolve_entities=False)
    tree = etree.parse("input.xml")
    tree.write("out.xml")

输出:

代码语言:javascript
复制
<tag1>
  <tag2 attr1="a1"> " example text "  </tag2>
  <tag3>
    <tag4 attr2="a2"> " example text " </tag4>
    <tag5>
      <tag6 attr3="a3"> ' example text ' </tag6>
    </tag5>
  </tag3>
</tag1>

我想保留&quot;&apos;。我甚至试着用

代码语言:javascript
复制
f = open('output.xml', 'w')
f.write(etree.tostring(tree1.getroot(),encoding="UTF-8",xml_declaration=False))
f.close()

但他们都没有解决这个问题。

然后,我尝试用手工替换“&quot;”。

代码语言:javascript
复制
root = tree.getroot()
tag_elements = root.iter()
for tag in tag_elements:
        tag_text = tag.text
        if tag_text is not None:
               tag_text1 = tag_text.replace("\"","&quot;")
               tag.text = tag_text1

但是这给出了下面的输出

代码语言:javascript
复制
<tag1>
  <tag2 attr1="a1"> &amp;quot; example text &amp;quot;  </tag2>
  <tag3>
    <tag4 attr2="a2"> &amp;quot; example text &amp;quot; </tag4>
    <tag5>
      <tag6 attr3="a3"> &apos; example text &apos; </tag6>
    </tag5>
  </tag3>
</tag1>

它用&amp;代替&。我在这里很困惑。请帮我解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2015-04-28 20:24:12

&amp;是字符&的xml编码。&quot;是字符"的xml编码。不需要对字符"'进行编码,因此lxml不对它们进行编码。

你又试着解码文件了吗?它应该能像你期望的那样起作用。如果您需要再次对文档中的字符串进行编码(将&转换为&amp;等),那么在生成新的xml文档之前,使用lxml树中的各个字符串进行编码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29922680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档