在Python minidom中归一化XML文本节点

0 投票
1 回答
1436 浏览
提问于 2025-04-18 01:29

我想把这个字符串:

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 个回答

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 调用的,而不是你的根节点)。

撰写回答