Разбор html -> xml и запрос с помощью Xpath

Я хочу проанализировать html-страницу, чтобы получить некоторые данные. Сначала я конвертирую его в XML-документ с помощью SgmlReader . Затем я загружаю результат в XMLDocument и затем просматриваю XPath:

//contains html document
var loadedFile = LoadWebPage();

...

Sgml.SgmlReader sgmlReader = new Sgml.SgmlReader();
sgmlReader.DocType = "HTML";
sgmlReader.WhitespaceHandling = WhitespaceHandling.All;
sgmlReader.CaseFolding = Sgml.CaseFolding.ToLower;

sgmlReader.InputStream = new StringReader(loadedFile);

XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
doc.XmlResolver = null;
doc.Load(sgmlReader);

Этот код отлично работает в большинстве случаев, кроме этого сайта - www.arrow.com (попробуйте найти что-то вроде OP295GS). Я могу получить таблицу с результатом, используя следующий XPath:

var node = doc.SelectSingleNode(".//*[@id='results-table']");

Это дает мне узел с несколькими дочерними узлами:

[0]         {Element, Name="thead"}  
[1]         {Element, Name="tbody"}  
[2]         {Element, Name="tbody"}  
FirstChild   {Element, Name="thead"}

Хорошо, давайте попробуем получить некоторые дочерние узлы с помощью XPath. Но это не работает:

var childNodes = node.SelectNodes("tbody");
//childnodes.Count = 0

Это также:

var childNode = node.SelectSingleNode("thead");
// childNode = null

И даже это:

var childNode = doc.SelectSingleNode(".//*[@id='results-table']/thead")

Что может быть не так в запросах Xpath?


Я только что попытался разобрать эту HTML-страницу с помощью Html Agility Pack , и мои запросы XPath работают хорошо. Но мое приложение использует внутри XmlDocument, Html Agility Pack мне не подходит.


Я даже попробовал следующий трюк с Html Agility Pack , но запросы Xpath также не работают :

//let's parse and convert HTML document using HTML Agility Pack and then load
//the result to XmlDocument
HtmlDocument xmlDocument = new HtmlDocument();
xmlDocument.OptionOutputAsXml = true;
xmlDocument.Load(new StringReader(webPage));

XmlDocument document = new XmlDocument();
document.LoadXml(xmlDocument.DocumentNode.InnerHtml);

Возможно, Чтобы прояснить этот вопрос и снова открыть его, посетите справочный центр .

Закрыт 8 лет назад .

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

Кто-нибудь раньше создавал виджеты для встраивания в другие сайты? Что лучше всего было их спроектировать / спроектировать? Есть какие-нибудь хорошие практики?

Спасибо,

Кто-нибудь раньше создавал виджеты для встраивания в другие сайты? Что лучше всего было их спроектировать / спроектировать? Есть какие-нибудь хорошие практики?

Спасибо,

Кто-нибудь раньше создавал виджеты для встраивания в другие сайты? Что лучше всего было их спроектировать / спроектировать? Есть какие-нибудь хорошие практики?

Спасибо, Alex

9
задан Jonah 19 March 2011 в 03:32
поделиться