栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何使用ElementTree输出CDATA

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何使用ElementTree输出CDATA

经过一些工作,我自己找到了答案。查看ElementTree.py源代码,我发现对XML注释和预处理指令进行了特殊处理。他们要做的是为特殊元素类型创建工厂函数,该函数使用特殊(非字符串)标记值将其与常规元素区分开。

def Comment(text=None):    element = Element(Comment)    element.text = text    return element

然后,在

_write
实际输出XML的ElementTree函数中,有一种特殊情况的注释处理:

if tag is Comment:    file.write("<!-- %s -->" % _escape_cdata(node.text, encoding))

为了支持CDATA部分,我创建了一个工厂函数

CDATA
,扩展了ElementTree类并更改了该
_write
函数以处理CDATA元素。

如果您想解析带有CDATA部分的XML,然后再次将其与CDATA部分一起输出,这仍然无济于事,但这至少允许您以编程方式创建带有CDATA部分的XML。

该实现似乎可以与ElementTree和cElementTree一起使用。

import elementtree.ElementTree as etree#~ import cElementTree as etreedef CDATA(text=None):    element = etree.Element(CDATA)    element.text = text    return elementclass ElementTreeCDATA(etree.ElementTree):    def _write(self, file, node, encoding, namespaces):        if node.tag is Cdata: text = node.text.enpre(encoding) file.write("n<![CDATA[%s]]>n" % text)        else: etree.ElementTree._write(self, file, node, encoding, namespaces)if __name__ == "__main__":    import sys    text = """    <?xml version='1.0' encoding='utf-8'?>    <text>    This is just some sample text.    </text>    """    e = etree.Element("data")    cdata = CDATA(text)    e.append(cdata)    et = ElementTreeCDATA(e)    et.write(sys.stdout, "utf-8")


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/611550.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号