C# 这不适合Html解析器吗?
我必须处理格式错误的Html和Html属性中的Html标记:C# 这不适合Html解析器吗?,c#,html-parsing,html-agility-pack,C#,Html Parsing,Html Agility Pack,我必须处理格式错误的Html和Html属性中的Html标记: <p class="<sometag attr="something"></sometag>"> <a href="<someothertag></someothertag">Link</a> </p> p标记格式不正确,a标记的href属性中的someothertag未被识别为节点(虽然它实际上是属性中的文本,但我希望它被识别为
<p class="<sometag attr="something"></sometag>">
<a href="<someothertag></someothertag">Link</a>
</p>
p
标记格式不正确,a
标记的href
属性中的someothertag
未被识别为节点(虽然它实际上是属性中的文本,但我希望它被识别为标记)
还有什么东西可以帮助我解析像这样糟糕的Html吗?你可能会问很多解析器,因为这可能是一种罕见的情况。你可能需要自己解决这个问题 我看到的主要问题是,属性值中有多组双引号。是否保证标记在每次打开时都有匹配的结束字符?换句话说,对于每一个都会有一个strong>,对于每一个“或”,都会有一个匹配的结束标记吗 如果是这样的话,我的建议是获取HTML解析器的源代码,比如HTML Agility Pack,并为属性解析添加一些功能。使用堆栈;对于每个开头字符,推送它,然后读取,直到找到另一个开头或结尾字符。如果是开头字符,推送它,如果是结尾字符,则弹出它 或者,您可以在属性值中添加小于和大于字符的检测,并且在关闭所有包含的标记之前不识别属性值的结尾
另一种可能的解决方案是在将源标记传递给解析器并将属性值中的非法字符更改为转义字符(符号和分号)之前修改源标记。不幸的是,这需要您做一些初步的分析。您可能会问很多解析器,因为这可能是一种罕见的情况。您可能需要自己解决这个问题 我看到的主要问题是属性值中有一组双引号。是否保证标记在每个开头都有一个匹配的结束字符?换句话说,对于每个都有一个strong>,对于每个开头“或”,一个匹配的结束标记 如果是这样的话,我的建议是获取HTML解析器的源代码,比如HTML Agility Pack,并为属性解析添加一些功能。使用堆栈;对于每个开头字符,按下它,然后阅读,直到找到另一个开头或结尾字符。如果它在打开,推它,如果它在关闭,弹出它 或者,您可以在属性值中添加小于和大于字符的检测,并且在关闭所有包含的标记之前不识别属性值的结尾
另一种可能的解决方案是在将源标记传递给解析器并将属性值中的非法字符更改为转义字符(符号和分号)之前修改源标记。不幸的是,这需要您做一些初步的分析 它不是有效的html,所以我不认为你可以依靠html解析器来解析它。它不是有效的html,所以我不认为你可以依靠html解析器来解析它。恐怕你不能真正解析这样的东西。至少不是以你想要的方式工作。为什么你需要解析像这样可怕的东西?我甚至想知道谁/什么会产生这样的东西吗?这是我需要处理的自定义模板语法。恐怕你不能真正解析这样的东西。至少不是以你想要的方式工作。为什么需要解析这样可怕的东西?我想知道谁/什么会产生这样的东西吗?这是我需要处理的自定义模板语法。
<p class="<sometag attr=" something"="">">
<a href="<someothertag></someothertag">Link</a>
</p>