zoukankan      html  css  js  c++  java
  • xml.etree.ElementTree对CDATA的输出

         xml.etree.ElmentTree不支持CDATA 的输出,但是支持Comment的输出。由于在项目中需要输出带有CDATA块的XML文本,参考Comment的做法,修改ElmentTree中的

    _serialize_xml方法中。实现如下:
     

    import xml.etree.ElementTree as ET

    def CDATA(text=None):
    element = ET.Element('![CDATA[')
    element.text = text
    return element

    ET._original_serialize_xml = ET._serialize_xml

    def _serialize_xml(write, elem, qnames, namespaces,short_empty_elements, **kwargs):

    if elem.tag == '![CDATA[':
    #write(" <{}{}]]> ".format(elem.tag, elem.text))
    write("<%s%s]]>" % (elem.tag, elem.text))
    if elem.tail:
    write(ET._escape_cdata(elem.tail))
    else:
    return ET._original_serialize_xml(write, elem, qnames, namespaces,short_empty_elements, **kwargs)

    ET._serialize_xml = ET._serialize['xml'] = _serialize_xml
     

    测试代码:

    text = """
    <?xml version='1.0' encoding='utf-8'?>
    <text>
    This is just some sample text.
    </text>
    """

    e = ET.Element("data")
    cdata = MyET.CDATA(text)
    e.append(cdata)

    #tests
    print(ET.tostring(e,encoding="utf-8"))
     
    结果:
    b"<data><![CDATA[
    <?xml version='1.0' encoding='utf-8'?>
    <text>
    This is just some sample text.
    </text>
    ]]></data>"
     
  • 相关阅读:
    如何在SpringMVC中使用REST风格的url
    c#实现的udt
    数据库查询服务化-缓存和分页
    c#常用数据库封装再次升级
    c#数据库连接池Hikari重构升级
    c# 常用数据库封装
    聊聊数据存储查询
    c#分析SQL语句
    c# 分析SQL语句中的表操作
    c#最近博文结尾
  • 原文地址:https://www.cnblogs.com/liaofeifight/p/5541790.html
Copyright © 2011-2022 走看看