我的應用程序使用XmlDocument生成XML。一些數據包含換行符和回車符。使用XmlDocument轉義換行符
當文本被分配給的XmlElement這樣的:
e.InnerText = "Hello\nThere";
生成的XML看起來像這樣:
<e>Hello
There</e>
的XML(我無法控制的)的接收器對待新行作爲空格,並將上面的文字看作:
"Hello There"
對於接收方來說ret泉新行它需要編碼爲:如果數據被施加到一個XmlAttribute
<e>Hello
There</e>
,新的行被正確編碼。
我試過應用文本到XmlElement使用InnerText和InnerXml但輸出是相同的兩個。
有沒有辦法讓XmlElement文本節點在其編碼形式中輸出新行和回車符?
下面是一些示例代碼演示此問題:
string s = "return[\r] newline[\n] special[&<>\"']";
XmlDocument d = new XmlDocument();
d.AppendChild(d.CreateXmlDeclaration("1.0", null, null));
XmlElement r = d.CreateElement("root");
d.AppendChild(r);
XmlElement e = d.CreateElement("normal");
r.AppendChild(e);
XmlAttribute a = d.CreateAttribute("attribute");
e.Attributes.Append(a);
a.Value = s;
e.InnerText = s;
s = s
.Replace("&" , "&" )
.Replace("<" , "<" )
.Replace(">" , ">" )
.Replace("\"", """)
.Replace("'" , "'")
.Replace("\r", "
" )
.Replace("\n", "
" )
;
e = d.CreateElement("encoded");
r.AppendChild(e);
a = d.CreateAttribute("attribute");
e.Attributes.Append(a);
a.InnerXml = s;
e.InnerXml = s;
d.Save(@"C:\Temp\XmlNewLineHandling.xml");
該程序的輸出是:
<?xml version="1.0"?>
<root>
<normal attribute="return[
] newline[
] special[&<>"']">return[
] newline[
] special[&<>"']</normal>
<encoded attribute="return[
] newline[
] special[&<>"']">return[
] newline[
] special[&<>"']</encoded>
</root>
預先感謝。 Chris。
你想要什麼不明確。請顯示你想要的,以及你得到的東西 – TFD
看看前4個代碼行:我從什麼開始,我得到什麼,接收者看到什麼,我想要什麼。屬性按我想要的方式對換行符進行編碼,而元素則不會。 –