1

アンパサンド(&)をエスケープした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); 
}
4

6 に答える 6

5

ele.InnerXmlの代わりにele.InnerTextを使用してください

于 2012-08-29T15:29:48.293 に答える
1

データを取得するためにCDATAを使用できます

「<」や「&」などの文字は、XML要素では無効です。「<」パーサーは、これを新しい要素の開始として解釈します。「&」パーサーは、それを文字エンティティの開始として解釈します。

于 2012-08-29T12:54:43.180 に答える
0

この静的メソッドを使用して、エスケープ文字をデコードしてみてください。HttpServerUtility.HtmlDecodeメソッド(文字列)ここの例を参照してください:http: //msdn.microsoft.com/ru-ru/library/hwzhtkke.aspx

于 2012-08-29T13:01:10.230 に答える
0
use
 HttpServerUtility.HtmlDecode (ele.InnerXml);
于 2012-08-29T12:56:30.433 に答える
0
Console.WriteLine (HttpUtility.UrlDecode(String.Format("{0}",ele.InnerXml)));
于 2012-08-29T12:56:40.730 に答える
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 ;
 }
于 2012-08-29T13:28:13.017 に答える