>和<而不是>和<在XmlWriter.writeElementString的情况下

时间:2017-12-22 14:33:16

标签: c# xml

using (XmlWriter writer = XmlWriter.Create("books.xml")) {
    writer.WriteStartElement("book"); 
    writer.WriteAttributeString("author", "j.k.rowling"); 
    writer.WriteAttributeString("mailBody", mail.BodyText);
    writer.WriteString("99");
    writer.WriteEndElement();
}

我有上述情况。一切都很好,但writer.WriteAttributeString("mailBody", mail.BodyText);给出了一个问题。 mail.BodyText是一个字符串并且具有<和>在内容中。当xml被写入文件时,我会看到& gt和& lt。我不想要这个加密版本。我该如何解决?

2 个答案:

答案 0 :(得分:2)

这不是“加密版本”,它是符合标准的版本。 XML禁止<属性;你必须使用相应的字符实体。

这是正确的行为:当您从该XML文件中读回属性时,从string属性返回的mailBody将使用原始字符代替字符实体,因此数据将“正确地”往返。

如果您希望在原始XML表单中显示<>的部分,请改为使用CDATA部分:

writer.WriteStartElement("mailBody");
writer.WriteCData(mail.BodyText);
writer.WriteEndElement();

答案 1 :(得分:-1)

发布解决方案以供将来参考。

要分别生成<>个字符而不是&lt;&gt;,需要使用WriteRaw()方法。

这是实现,

w.WriteStartElement("myRoot");
w.WriteRaw("<");
w.WriteEndElement();

输出

<myRoot><</myRoot>

希望这会有所帮助。谢谢!

Solution Credits