2011-07-24 61 views
0

我不得不处理在HTML里面不良HTML和HTML标签属性:这不适合Html解析器吗?

<p class="<sometag attr="something"></sometag>"> 
    <a href="<someothertag></someothertag">Link</a> 
</p> 

我试着用HtmlAgilityPack解析出的内容,但是当你在上面的代码加载到的HTMLDocument,则OuterHtml输出:

<p class="<sometag attr=" something"="">"> 
    <a href="<someothertag></someothertag">Link</a> 
</p> 

p标签格式错误,进而a标签的href属性里面的someothertag不被识别为一个节点(虽然它是真正的文本属性里面,我想它是RECO gnized作为标签)。

有什么我可以用来帮助我解析这样的坏Html吗?

+0

恐怕你不能真的解析这样的事情。至少不是以你想要的方式工作的方式。为什么你需要解析这样可怕的事情? – svick

+0

我甚至想知道谁/会产生这样的事情吗? – ChaosPandion

+0

这是一个我需要处理的自定义模板语法。 – Omar

回答

1

您可能会问很多解析器,因为这可能是一种罕见的情况。你可能需要自己解决这个问题。

我看到的主要问题是属性值中有双引号组。是否保证标记在每次开放时都会有一个匹配的结束字符?换句话说,每一个<会不会有>并为每开,匹配的结束标记?

如果是这样的,我的建议是将源的情况下,一个HTML解析器,比如Html Agility Pack,并为属性解析添加一些功能;使用堆栈;对于每个开头的字符,按下它,然后阅读,直到找到另一个开头或结尾字符;如果它打开,按下,如果关闭,弹出它

或者,您可以添加检测为低于和grea在属性值中包含三个以上的字符,并且不识别该属性值的结尾,直到所有包含的标签都关闭。

另一个可能的解决方案是在将源标记传递给解析器并将属性值中的非法字符更改为转义字符(&符号 - 分号)之前修改源标记。不幸的是,这需要你做一些初步的解析。

2

它不是有效的html,所以我不认为你可以依靠一个html解析器来解析它。