Вы можете использовать любой один метод.
Вот 4 способа кодирования XML в C #:
- string.Replace () 5 раз
Это ужасно, но это работает. Обратите внимание, что Replace("&", "&")
должна быть первой заменой, поэтому мы не заменяем другие уже сбежавшие &.
string xml = "<node>it's my \"node\" & i like it<node>";
encodedXml = xml.Replace("&","&").Replace("<","<").Replace(">",">").Replace("\"", """).Replace("'", "'");
// RESULT: <node>it's my "node" & i like it<node>
- System.Web.HttpUtility.HtmlEncode ()
Используется для кодирования HTML, но HTML является формой XML, поэтому мы можем использовать это тоже. В основном используется в приложениях ASP.NET. Обратите внимание, что HtmlEncode НЕ кодирует апострофы (').
string xml = "<node>it's my \"node\" & i like it<node>";
string encodedXml = HttpUtility.HtmlEncode(xml);
// RESULT: <node>it's my "node" & i like it<node>
- System.Security.SecurityElement.Escape ()
В Windows Forms или консольных приложениях я использую этот метод. Если ничего другого, это спасает меня, включая ссылку System.Web в моих проектах, и он кодирует все 5 символов.
string xml = "<node>it's my \"node\" & i like it<node>";
string encodedXml = System.Security.SecurityElement.Escape(xml);
// RESULT: <node>it's my "node" & i like it<node>
- System.Xml.XmlTextWriter
Используя XmlTextWriter, вам не нужно беспокоиться об экранировании чего-либо, поскольку оно экранирует символы, где это необходимо. Например, в атрибутах он не экранирует апострофы, а в значениях узлов он не экранирует апострофы и квоты.
string xml = "<node>it's my \"node\" & i like it<node>";
using (XmlTextWriter xtw = new XmlTextWriter(@"c:\xmlTest.xml", Encoding.Unicode))
{
xtw.WriteStartElement("xmlEncodeTest");
xtw.WriteAttributeString("testAttribute", xml);
xtw.WriteString(xml);
xtw.WriteEndElement();
}
// RESULT:
/*
<xmlEncodeTest testAttribute="<node>it's my "node" & i like it<node>">
<node>it's my "node" & i like it<node>
</xmlEncodeTest>
*/
[http://weblogs.sqlteam.com/mladenp/archive/2008/10/21/Different-ways-how-to-escape-an-XML-string-in-C.aspx]