从c#中的XmlDocument中读回特殊字符

时间:2012-08-29 12:51:43

标签: c# xml xmldocument

假设我有一个带有转义符号(&)的xml。然后我如何阅读它,以便结果给我“未转义”文本。

运行以下内容会给我“& amp”作为结果。如何取回'&'

void Main()
{
  var xml = @"
  <a>
    &amp;
  </a>
  ";
  var doc = new XmlDocument();
  doc.LoadXml(xml);
  var ele = (XmlElement)doc.FirstChild;
  Console.WriteLine (ele.InnerXml); 
}

6 个答案:

答案 0 :(得分:5)

使用 ele.InnerText 代替 ele.InnerXml

答案 1 :(得分:1)

您可以使用CDATA来获取数据

像“&lt;”这样的字符和“&amp;”在XML元素中是非法的。“&lt;”解析器将其解释为新元素的开头。 “&安培;”解析器将其解释为字符实体的开头。

答案 2 :(得分:0)

use
 HttpServerUtility.HtmlDecode (ele.InnerXml);

答案 3 :(得分:0)

Console.WriteLine (HttpUtility.UrlDecode(String.Format("{0}",ele.InnerXml)));

答案 4 :(得分:0)

尝试使用此静态方法解码转义字符: HttpServerUtility.HtmlDecode方法(String) 见这里的例子: http://msdn.microsoft.com/ru-ru/library/hwzhtkke.aspx

答案 5 :(得分:0)

以下字符在XML元素中是非法的:

Illegal EscapedUsed
------------------
    "   &quot;
    '   &apos;
    <   &lt;
    >   &gt;
    &   &amp;

要获得未转义的值,您可以使用:

 public string UnescapeXMLValue(string xmlValue)
  {
    if (string.IsNullOrEmpty(s)) return s;
   string temp = s;
   temp = temp.Replace("&apos;", "'").Replace("&quot;", "\"").Replace("&gt;", ">").Replace("&lt;", "<").Replace("&amp;", "&");
   return temp ;
 }

要获取转义价值,您可以使用:

public string EscapeXMLValue(string value)
  {
    if (string.IsNullOrEmpty(s)) return s;
   string temp = s;
   temp = temp.Replace("'","&apos;").Replace( "\"", "&quot;").Replace(">","&gt;").Replace( "<","&lt;").Replace( "&","&amp;");
   return temp ;
 }