在Python minidom中归一化XML文本节点
我想把这个字符串:
No, on the 5<Font Script="super">th</Font>
作为文本节点插入到XML中,使用xml.dom.minidom的createTextNode()方法。不过,当我用writexml()把内容写入文件后,这些符号:
< > "
变成了:
No, on the 5<Font Script="super">th</Font>
我该怎么避免这种情况呢?谢谢。
这是我代码的一部分:
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 个回答
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
方法(你之前是用 dom
调用的,而不是你的根节点)。