HTML Agility Pack修复<li>列表顺序</li>

时间:2010-07-06 02:04:46

标签: c# .net html html-agility-pack

我一直在尝试使用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 个答案:

答案 0 :(得分:1)

我找到了一个名为HTML Tidy http://tidy.sourceforge.net/的敏捷包的替代品。我实际上使用了名为Tidy.NET http://sourceforge.net/projects/tidynet/的.NET端口,这似乎解决了我的问题。

答案 1 :(得分:0)

我也在其他网站上发现了你的问题。您要解析的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>和文本(它是HAP的TextNode),保存其他<li>子项并删除子项,插入它们(在格式化时)父节点。
您可能必须采用递归方式。以下是我对HTML Sanitizer类的解决方案:HTML Agility Pack strip tags NOT IN whitelist

答案 2 :(得分:-1)

    HtmlNode ul = _sourceForm.SelectSingleNode("//ul");
    HtmlNodeCollection childList = ul.ChildNodes;

然后,您可以遍历子列表以获取您感兴趣的文本元素。