在Python minidom中规范化XML文本节点

时间:2014-04-05 15:22:41

标签: python xml minidom

我想插入此字符串:

No, on the 5<Font Script="super">th</Font>

作为XML中的文本节点xml.dom.minidom createTextNode(),但是,在我将writexml()写入文件后,标志:

< > "

转向:

No, on the 5&lt;Font Script=&quot;super&quot;&gt;th&lt;/Font&gt;

我该如何避免这种情况?感谢。

我的代码的一部分:

impl = minidom.getDOMImplementation()
dom = impl.createDocument(None, None, None)
TextTextNode = dom.createTextNode(text.decode("utf-8"))
Text = dom.createElement("Text")
Text.appendChild(TextTextNode)
fileToWrite =  codecs.open(output, 'w', encoding='utf-8')
dom.writexml(fileToWrite, indent=" ", addindent=" ", newl="\n", encoding='utf-8')
fileToWrite.close() 

cinecanvase规范有一个示例:

<Text HAlign=”left” HPosition=”10.2” VAlign=”bottom” VPosition=”10.0”> This <Font Script=”super”>word </Font>is superscript </Text > 

我需要将<Font>..</Font>插入另一个元素,即。

1 个答案:

答案 0 :(得分:1)

我不熟悉那种格式,但那个东西看起来像一个XML节点。试试这个:

from xml.dom import minidom
import codecs

output = "test.xml"
text="No, on the 5"


impl = minidom.getDOMImplementation()
dom = impl.createDocument(None, None, None)
FontNode = dom.createElement("Font")
FontNode.setAttribute('Script', 'super')
FontNode.appendChild(dom.createTextNode('th'))
Text = dom.createElement("Text")
TextTextNode = dom.createTextNode(text.decode("utf-8"))
Text.appendChild(TextTextNode)
Text.appendChild(FontNode)
fileToWrite =  codecs.open(output, 'w', encoding='utf-8')
Text.writexml(fileToWrite, indent=" ", addindent=" ", newl="\n")
fileToWrite.close() 

输出:

 <Text>
  No, on the 5
  <Font Script="super">th</Font>
 </Text>

请注意您要在文件中编写树的内容(当您调用writexml时),您需要使用XML的树根调用writexml方法(您使用{{{ 1}},而不是你的根节点)