解析XML / XHTML文档但忽略C#中的错误

时间:2009-03-11 14:17:24

标签: c# xml

我正在编写一些小应用程序来解析几个网页的来源,提取一些数据,并将其保存为另一种格式。具体来说,我的一些银行不提供交易/报表的下载,但它们确实可以访问其网站上的这些报表。

我做了一次罚款,但另一次(汇丰银行英国)证明了屁股的痛苦,因为它的来源不是有效的XHTML。例如,在<?xml?>标记之前有空格,并且在属性名称及其值(例如==)之间存在使用=而不是<li class=="lastItem">的位置。< / p>

当然,当我将这些数据传递给我的XmlDocument时,它会抛出一个摇摆不定的(更确切地说是异常)。

我的问题是:是否可以放宽C#中XML解析的要求?我知道在源头解决这些问题要好得多 - 这绝对是我的态度 - 但是汇丰银行改变他们的网站的机会几乎为零,而这些网站已经在大多数浏览器中运行,只是为了我的老朋友。

3 个答案:

答案 0 :(得分:7)

看看HTML agility pack。它允许您通过XPath提取非XHTML兼容网页的元素,就好像它是一个格式良好的XHTML文档。

对于Kleene的爱,不要试图复制具有任何复杂性的HTML页面!

答案 1 :(得分:3)

我不相信你可以放松解析,但是你可以通过类似HTML Tidy之类的东西来运行它,让 处理这个混乱。

答案 2 :(得分:0)

如果它们不符合XHTML,则无论您如何努力,都无法将HTML推送到XMLDocument对象中。

如果这是低音量,您可以使用WebBrowserControl创建一个空的HtmlDocument对象,然后使用HtmlDocument的Write()方法将您检索到的字符串从中删除。

另一个选项是mshtml.HTMLDocument,这在.NET中有点麻烦,因为它是互操作的。

最常见的屏幕刮擦类型是使用正则表达式。一旦你确定了你正在寻找的模式,你就可以反复刮擦。