0

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

我需要

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

代替

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

2 回答 2

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();

它似乎工作。

于 2013-08-30T18:20:17.540 回答
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>
于 2013-08-29T19:38:48.927 回答