【问题标题】:python CDATA in subelement子元素中的python CDATA
【发布时间】:2015-01-29 10:14:23
【问题描述】:

我正在尝试将 CDATA 添加到 XML 的子元素中。但是 XML 不断将< 字符转换为<

我在这里读到了some posts,它对 CDATA 做了一些事情,但我不敢相信让它工作这么难。除此之外,我无法让这些示例正常工作。

下面是我使用 python 3.4 简化的部分代码。

将 xml.etree.cElementTree 导入为 ET 从 xml.dom 导入 minidom

class MyClass():
    def __init__(self):
        self.xml = None

    def generateXML(self):
        self.xml = ET.Element("AVXML")
        row = ET.SubElement(self.xml, "ROW")
        ET.SubElement(row, "DATA").text = "<![CDATA[ <ART_HDR.COMMENT1>.PDF ]]>"

    def saveXML(self):
        rough_string = ET.tostring(self.xml, 'Windows-1252')
        reparsed = minidom.parseString(rough_string)
        prettyxml = reparsed.toprettyxml(indent="  ", encoding="Windows-1252")

        print(prettyxml)

        f = open("filetosave.xml", "wb")
        f.write(prettyxml)
        f.close()

m = MyClass()
m.generateXML()
m.saveXML()

然而这会产生:

<DATA>&lt;![CDATA[ &lt;ART_HDR.COMMENT1&gt;.PDF ]]&gt;</DATA>

代替

<DATA><![CDATA[ <ART_HDR.COMMENT1>.PDF ]]></DATA>

【问题讨论】:

    标签: python cdata


    【解决方案1】:

    好的,我使用了this comment 并成功了。

    将 xml.etree.cElementTree 导入为 ET 从 xml.dom 导入 minidom

    class MyClass():
        def __init__(self):
            self.xml = None
    
        def generateXML(self):
            self.xml = ET.Element("AVXML")
            row = ET.SubElement(self.xml, "ROW")
            data = " <ART_HDR.COMMENT1>.PDF "
            cdata = ET.SubElement(row, "DATA")
            cdata.append(ET.Comment(' --><![CDATA[' + data.replace(']]>', ']]]]><![CDATA[>') + ']]><!-- '))
    
        def saveXML(self):
            rough_string = ET.tostring(self.xml, 'Windows-1252')
            reparsed = minidom.parseString(rough_string)
            prettyxml = reparsed.toprettyxml(indent="  ", encoding="Windows-1252")
    
            f = open("filetosave.xml", "wb")
            f.write(prettyxml)
            f.close()
    
    m = MyClass()
    m.generateXML()
    m.saveXML()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-06
      • 2016-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多