2013-08-29 34 views
0

我正在與第三方合作,他們堅持認爲他們需要xml特殊字符作爲代碼,即:& &#174而不是(R)符號。每次我保存一個XmlDocument,雖然我得到的符號。我似乎無法讓它輸出代碼。我需要XmlDocument將特殊字符保存爲代碼而不是符號

我需要

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

,而不是

<tag>Words...®</tag> 
+0

你可以使用字符串'@'嗎? –

+2

請顯示一個小例子,並顯示您希望如何顯示。另外,告訴我們你是如何知道你「得到了符號」的。你檢查過磁盤嗎? –

+0

您的示例不匹配,您的意思是' Words ...&®'是否爲源字符串? –

回答

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> 
+0

我不認爲他們會喜歡標籤。我只需要代碼 – ForeverNoobie

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

,它似乎工作。

相關問題