HTML Agility Pack Fix <li>порядок списка - PullRequest
1 голос
/ 06 июля 2010

Я пытался использовать HTML Agility Pack, чтобы разобрать HTML-код в действительный XHTML, чтобы перейти в больший файл XML. Это по большей части работает, однако списки форматируются как:

<ul>
    <li>item1
    <li>item2
    </li></li>
</ul>

В отличие от того, что я ожидал:

<ul>
    <li>item1</li>
    <li>item2</li>
</ul>

К сожалению, этот формат с вложенными тегами li не проходит проверку схемы, которую я не могу контролировать. Кто-нибудь знает простой способ исправить это либо с помощью HTML Agility Pack, либо с помощью альтернативы. Желательно в .NET.

Ответы [ 3 ]

1 голос
/ 30 августа 2010

Я нашел альтернативу пакету гибкости под названием HTML Tidy http://tidy.sourceforge.net/ Я фактически использовал порт .NET под названием Tidy.NET http://sourceforge.net/projects/tidynet/, который, похоже, решил мою проблему.

0 голосов
/ 29 августа 2010

Я нашел ваше задание и на других сайтах. HTML-код, который вы пытаетесь проанализировать:

<UL>
<LI>NVQ Level 3 in Fabrication and Welding Engineering
<LI>Level 3 Certificate in Engineering
<LI>Level&nbsp;2 Key Skill in Application of Number
<LI>Level&nbsp;2 Key Skill in Communication
<LI>Level&nbsp;2 Key Skill in Information Technology
<LI>Level 2 Key Skill in Working with Others
<LI>Level 2 Key Skill in Improving Own Learning &amp; Performance</LI></UL>

Что я заметил, так это то, что первый <li> является родителем другого <li>'s. Один из подходов, который я хотел бы предпринять, заключается в том, чтобы взять первый <li> и текст (это TextNode для HAP), сохранить остальные <li> дочерние элементы и удалить дочерние элементы, вставляя их (при их формировании) после родительского узла.
Возможно, вам придется пойти по этому пути рекурсивно. Вот мое решение для класса HTML Sanitizer: HTML-теги полосы Agility Pack НЕ В белом списке

0 голосов
/ 09 июля 2010
    HtmlNode ul = _sourceForm.SelectSingleNode("//ul");
    HtmlNodeCollection childList = ul.ChildNodes;

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

...