Разбор документа XML / XHTML, но игнорирование ошибок в C # - PullRequest
2 голосов
/ 11 марта 2009

Я пишу несколько небольших приложений, которые анализируют источник нескольких веб-страниц, извлекают некоторые данные и сохраняют их в другом формате. В частности, некоторые из моих банков не обеспечивают загрузку транзакций / выписок, но они предоставляют доступ к этим выпискам на своих веб-сайтах.

Я сделал один штраф, но другой (HSBC UK) доказывает боль в заднице, поскольку его источник не является действительным XHTML. Например, перед тегом <?xml?> есть пробел, и есть места, где вместо = используется == между именем атрибута и его значением (например, <li class=="lastItem">).

Конечно, когда я передаю эти данные в мой XmlDocument, они бросают шаткое (точнее, исключение).

У меня такой вопрос: возможно ли ослабить требования для разбора XML в C #? Я знаю, что гораздо лучше решить эти проблемы в источнике - это абсолютно мое отношение, но вероятность того, что HSBC изменит свой веб-сайт, который уже работает в большинстве браузеров, - только для маленького меня.

Ответы [ 3 ]

7 голосов
/ 11 марта 2009

Взгляните на HTML-пакет agility . Он позволяет извлекать элементы не-XHTML-совместимой веб-страницы через XPath, как если бы это был правильно сформированный документ XHTML.

И ради любви к Клини, не пытайтесь переформулировать HTML-страницу с какими-либо сложностями!

3 голосов
/ 11 марта 2009

Я не верю, что вы можете ослабить синтаксический анализ, но вы могли бы запустить его через что-то вроде HTML Tidy первым, чтобы это справилось с беспорядком.

0 голосов
/ 11 марта 2009

Если они не совместимы с XHTML, вы не можете вставить HTML в объект XMLDocument, независимо от того, как сильно вы пытаетесь.

Если это низкий объем, вы можете использовать WebBrowserControl для создания пустого объекта HtmlDocument, а затем использовать метод Write () HtmlDocument, чтобы поместить полученную строку для очистки.

Другой вариант - mshtml.HTMLDocument, с которым немного неудобно работать в .NET, поскольку он взаимодействует.

Однако наиболее распространенный тип очистки экрана - это использование Regex. После того, как вы определите шаблон, который вы ищите, вы можете снова и снова очищать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...