我正在与第三方合作,他们坚持要求xml特殊字符作为代码,即:&
&#174而不是(R)符号。每次我保存XmlDocument虽然我得到了符号。我似乎无法输出代码。
我需要
<tag>Words...&®</tag>
而不是
<tag>Words...®</tag>
答案 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("&®"));
本文档将包含以下文本格式,CDATA部分阻止XML处理器尝试解释特殊字符:
<?xml version="1.0" encoding="utf-16"?><Root><![CDATA[&®]]></Root>