2014-10-09 1 views
2

У меня есть следующий кодКак специальные символы экранирования в C#

XElement element = new XElement("test", "a&b"); 

где

element.LastNode содержит значение "a&b".

Я хотел быть этим "a&b".

Как это заменить?

+0

На каком языке вы работаете? –

+0

Я использую C# .net – user2392525

+0

Я попытался сделать элемент XElement = новый XElement ("test", HttpUtility.HtmlDecode ("a &b")); – user2392525

ответ

0

Попробуйте следующее:

public static string GetTextFromHTML(String htmlstring) 
    { 
     // replace all tags with spaces... 
     htmlstring= Regex.Replacehtmlstring)@"<(.|\n)*?>", " "); 

     // .. then eliminate all double spaces 
     while (htmlstring).Contains(" ")) 
     { 
      htmlstring= htmlstring.Replace(" ", " "); 
     } 

     // clear out non-breaking spaces and & character code 
     htmlstring = htmlstring.Replace("&nbsp;", " "); 
     htmlstring = htmlstring.Replace("&amp;", "&"); 

     return htmlstring; 
    } 
+0

использовать HTML Agility Pack вместо http://htmlagilitypack.codeplex.com/ – Jodrell

3

& является зарезервированным характер так будет ВСЕГДА быть закодирован. Таким образом, вы должны расшифровать:

Это вариант: HttpUtility.HtmlDecode Method (String)

Использование:

string decoded = HttpUtility.HtmlDecode("a&amp;b"); 
// returns "a&b" 
+0

это работает, но я не могу присвоить это строковое значение Xelement.Lastnode – user2392525

+0

Конечно, вы можете. Но он будет автоматически закодирован. –

+0

вы могли бы просто прочитайте 'element.Value', вы должны быть осторожны в HTML-декодировании XML. Он отлично работает для '&', но не все символы получают экранированные одинаковым образом по обоим стандартам. – Jodrell

4

Подождите,

< тест> а & б </тест>

Недействительный XML. Вы не можете заставить XML выглядеть так. Это clarified by the XML standard.

& имеет особое значение, это означает экранированный символ, который в противном случае может быть недействительным. Символ '&' кодируется как &amp; в формате XML.


для чего это стоит, это недопустимо HTML по той же причине.

<! DOCTYPE HTML> < HTML> < тело> а & б </тело> </html>


Если я пишу код,

const string Value = "a&b"; 
var element = new XElement("test", Value); 
Debug.Assert(
    string.CompareOrdinal(Value, element.Value) == 0, 
    "XElement is mad"); 

он работает без ошибок, XElement кодирует и декодирует в XML и из него по мере необходимости.

Чтобы освободить или декодировать элемент XML, вы просто читаете XElement.Value.

Если вы хотите, чтобы документ, который выглядит как

< тест> а & б </тест>

вы можете, но это не XML или HTML, инструменты для работы с HTML или XML не намеренно поможет вам. Вы создадите своих собственных читателей, писателей и парсеров.