上下文
我正在解析this service上的查询结果,但带有结果的HTML很乱。
我的目标是构建一个“KeyValue”对,每个“属性和值”都显示为此查询的结果。
目前只有一种方法可以解决它。
解析逻辑:
例如:具有值[0]的属性[0] - > (在此服务中,即“CNPJ”和“12.272.084 / 0001-00”)。
问题:
甚至我设法找到一个XPath表达式来获取所有属性节点:
attrNodes = htmlDoc.DocumentNode.SelectNodes ("//td[@bgcolor='#f1f1b1']/*/font[@face='Verdana']");
我无法为值节点找到一个节点,因为有不同类型的节点在用Html渲染时实际上看起来相同(例如“b”和“strong”)。
甚至有不同层次结构的节点阻止我在XPath上使用通配符(“*”)来解决它(例如单个标签或嵌套的两个标签)
我的目标:
知道如何实现目标?
HTML示例:
您可以勾选here
或通过在CNPJ文本框中键入: 12272084000100 来查询自己的服务 然后点击“Pesquisar”。之后,您只需点击文本“Companhia Eletrica de Alagoas”
先谢谢
答案 0 :(得分:3)
我刚刚找到了一个可以在HtmlAgilityPack框架的“HtmlNode”类中找到的属性,该类可以解决我的问题。
根据this documentation关于HtmlNode类:
StreamPosition
Gets the stream position of this node in the document, relative to the start of the document.
这是我的测试的输出,使用在这个相同的Html页面中找到的表列表(用于测试目的的表)
// HtmlNodeCollection of Tables
tableNodes[0].StreamPosition
925
tableNodes[1].StreamPosition
1651
tableNodes[2].StreamPosition
2387
使用此StreamPosition作为参数设置我的列表,以解决我的问题。
List<HtmlNode> OrderedList = valueNodes.OrderBy ( node => node.StreamPosition ).ToList<HtmlNode>();