Игнорирование при разборе с помощью HtmlAgilityPack

c# html-agility-pack

Вопрос

Я анализирую таблицу html в c #, используя Html Agility Pack, который содержит неразрывное пространство.

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(page);

Где страница - это строка, содержащая таблицу со специальными символами   в тексте.

<td>&#160;test</td>
<td>number =&#160;123&#160;</td>

Использование SelectSingleNode(".//td").InnerText будет содержать эти специальные символы, но я хочу их игнорировать.

Есть ли элегантный способ игнорировать это (с помощью или без помощи Html Agility Pack) без изменения исходной таблицы?

Принятый ответ

Вы можете использовать HtmlDecode

string foo = HttpUtility.HtmlDecode("Special char: &#160;");

Дает вам строку:

Специальный символ:


Популярные ответы

«Незаменимое пространство» специального характера, о котором вы говорите, является допустимым символом, который вполне может законно отображаться в тексте, так же, как «причудливые кавычки», em-dash и т. Д.

Часто мы хотим рассматривать некоторые символы как эквивалентные.

  • Таким образом, вы можете использовать знак em-dash, en-dash и минус / тире как один и тот же.
  • Или причудливые цитаты, как и прямые цитаты.
  • Или неразрывное пространство как обычное пространство.

Однако это не то, с чем может помочь пакет гибкости HTML. Для этого вам нужно использовать что-то вроде string.Replace или вашу собственную функцию канонизации.

Я бы предложил что-то вроде:

static string CleanupStringForMyApp(string s){
    // replace characters with their equivalents
    s = s.Replace(string.FromCharCode(160), " ");
    // Add any more replacements you want to do here
    return s;
}


Related

Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow