2012-08-13 45 views
2

一块HTML,我试图解析的故障解析属性包含一些属性的值没有引号,例如具有宽度和高度属性:的XmlReader:没有引号

<img src="/static/logo.png" width=75 height=90 /> 

在C#代码,所述读取器读取直到下一个锚标签。

while (reader.ReadToFollowing("a")) 

此语句报告一个XmlException:

'75' is an unexpected token. The expected token is '"' or '''. Line 16, position 37. 

有一些XmlReaderSetting做出的XmlReader较为宽松?我无法控制生成的HTML。

+1

您不应该使用XmlReader来解析HTML,例如,请参阅[在.Net中是否存在与XmlReader等效的HTML] [1]。 [1]:http://stackoverflow.com/questions/6452433/is-there-an-xmlreader-equivalent-for-html-in-net – Polyfun 2012-08-13 14:14:55

回答

5

为了阅读HTML,您需要一个专为此目的设计的阅读器。 HtmlAgilityPack可以帮助你在这里,如this answera related question中提到的SgmlReader

HTML不是XML。他们都基于SGML,但遵循不同的规则。 XML比HTML有更严格的规则,其中包括关闭所有标记和用单引号或双引号括起来的属性。因此,除非您解析符合XML的XHTML,否则XmlReader将无法为您工作。

+0

如何HtmlAgilityPAck可以帮助吗?我已经用 'htmlDoc.OptionFixNestedTags = true; htmlDoc.OptionCheckSyntax = true; htmlDoc.OptionAutoCloseOnEnd = true; htmlDoc.OptionOutputOptimizeAttributeValues = true;' 并没有什么诀窍...... – Ninita 2016-03-21 16:39:08

2

您也可以使用WebBrowser控件。加载文件并从WebBrowser.Document属性中获取一个HtmlDocument。然后你可以通过控件循环。

+0

太棒了。最初我使用HtmlAgilityPack,但对于这个简单的办公工具,我不想添加DLL依赖项(一个EXE就是我想要的),所以这个WebBrowser方法可以正常工作。 – byneri 2012-08-13 14:28:24

+0

这是一个有趣的黑客。这感觉有点肮脏,但我已经可以想到我可能会使用它的情况。 – 2012-08-13 14:31:48