2014-12-01 1 views
0

XML의 하위 요소에 CDATA를 추가하려고합니다. 그러나 XML은 < 문자를 &lt;으로 계속 변환합니다.파이썬 하위 요소의 CDATA

여기 CDATA를 사용하여 무언가를 수행하는 some posts을 읽었지만 제대로 작동하지 않는다고는 믿을 수 없습니다. 게다가, 나는 그 예제들을 작동시킬 수 없다.

아래 코드는 python 3.4를 사용하여 간단 해졌습니다. xml.dom 수입 minidom에서 ET 로

수입 xml.etree.cElementTree이

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> 

답변

0

두면를, 내가 사용 this comment 그리고 작동 시켰습니다. xml.dom 수입 minidom에서 ET 로

수입 xml.etree.cElementTree

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()