< &安培; >被转换为> <等等

时间:2009-06-18 08:07:57

标签: c++ xml msxml

我正在使用MSXMl库来解析xml

在我调用put_text然后调用get_xml

之后

输出将具有< &安培; >转换为<& >

我怎样摆脱这个?

4 个答案:

答案 0 :(得分:4)

<和>禁止在文本中使用,需要编码为& gt和& lt。避免这种情况的唯一方法是为包含这些内容的文本创建CDATA部分。但是你真的不需要,如果你打算用MS XML读取XMLT - 它会解码这些符号就好了,你会得到你的<和>在提取的文本中完全没问题。

答案 1 :(得分:3)

您正在从纯文本转换为XML编码文本 这是我期望的行为。

如果您想要放入原始字符串,请尝试使用get_text()转换回文本。

如果您不希望put_text()对文本进行编码而不对<和>然后它必须在CData部分内。

<![CDATA[    Text that can include < and > without encoding  ]]>

答案 2 :(得分:0)

您收到&lt还是&lt;

它们的末尾应该有一个分号作为有效实体。

答案 3 :(得分:0)

如果您希望将其作为文本包含在内,则将其转义为罚款。 每个xml pareser都会退回文本。

如果你想把它作为xml元素,你不能使用put_text创建它们,但需要以这种方式创建树

dataNode=xmlDoc.createElement("data")

idNode=xmlDoc.createElement("id")
textNode=xmlDoc.createTextNode("17")
idNode.appendChild(textNode)
nameNode=xmlDoc.createElement("name")
textNode=xmlDoc.createTextNode("Uday")
nameNode.appendChild(textNode)
...

dataNode.appendChild(idNode)
dataNode.appendChild(nameNode)
...

parentNode.appendChild(dataNode)

如果你用眼睛看并想要将文字写在你可能使用cdata部分的文件上,看起来会更好看。

newCDATA=xmlDoc.createCDATASection("<data><id>17</id>...</data>")
parentNode.appendChild(newCDATA)