我正在与坚持认为他们需要 xml 特殊字符作为其代码的第三方合作,即:&
® 而不是 (R) 符号。每次我保存一个 XmlDocument 虽然我得到了符号。我似乎无法让它输出代码。
我需要
<tag>Words...&®</tag>
代替
<tag>Words...®</tag>
我正在与坚持认为他们需要 xml 特殊字符作为其代码的第三方合作,即:&
® 而不是 (R) 符号。每次我保存一个 XmlDocument 虽然我得到了符号。我似乎无法让它输出代码。
我需要
<tag>Words...&®</tag>
代替
<tag>Words...®</tag>
我认为您可以通过创建自定义 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();
它似乎工作。
尝试将其添加为 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>