我需要XmlDocument来保存特殊字符作为代码而不是符号

时间:2013-08-29 19:31:28

标签: c# xml xmldocument

我正在与第三方合作,他们坚持要求xml特殊字符作为代码,即:&&#174而不是(R)符号。每次我保存XmlDocument虽然我得到了符号。我似乎无法输出代码。

我需要

<tag>Words...&amp;&#174;</tag>

而不是

<tag>Words...®</tag>

2 个答案:

答案 0 :(得分:1)

我认为您可以通过创建自定义XmlWriter来实现,例如

public class CustomXmlWriter : XmlTextWriter
{
    public CustomXmlWriter(TextWriter wr)
        : base(wr)
    {
    }

    public override void WriteString(string text)
    {
        text = HttpUtility.HtmlEncode(text);
        text = String.Join("",text.Select(Encode));
        base.WriteRaw(text);
    }

    string Encode(char c)
    {
        if (c < 127) return c.ToString();
        return "&#" + ((int)c).ToString() + ";";
    }
}

我用

测试了上面的功能
XElement xElem = new XElement("tag", "Words...®");
StringWriter wr = new StringWriter();
xElem.Save(new CustomXmlWriter(wr));
var xml = wr.ToString();

它似乎有效。

答案 1 :(得分:0)

尝试将其添加为CDATA:

XmlDocument doc = new XmlDocument();
var root = doc.AppendChild(doc.CreateElement("Root"));
root.AppendChild(doc.CreateCDataSection("&&#174"));

本文档将包含以下文本格式,CDATA部分阻止XML处理器尝试解释特殊字符:

<?xml version="1.0" encoding="utf-16"?><Root><![CDATA[&&#174]]></Root>