gpt4 book ai didi

c# - 根据它们在 HTML 页面上的位置对 HtmlNodes 进行排序 (C#/XPath)

转载 作者:行者123 更新时间:2023-11-27 22:36:53 25 4
gpt4 key购买 nike

上下文:

我正在解析关于 this service 的查询结果,但结果的 HTML 是一团糟。

我的目标是构建一个“KeyValue”对,每个“属性和值”都显示为该查询的结果。

目前我脑子里只有一种方法可以解决它。

解析逻辑:

  1. 选择所有的属性节点
  2. 选择所有值节点
  3. 在构建键值对的每个集合上匹配他们的“索引”

例如:属性 [0] 和值 [0] ->(在此服务中,这将是“CNPJ”和“12.272.084/0001-00”)。

问题:

即使我设法找到一个 XPath 表达式来获取所有属性节点:

attrNodes = htmlDoc.DocumentNode.SelectNodes ("//td[@bgcolor='#f1f1b1']/*/font[@face='Verdana']");

我也无法为值节点找到一个节点,因为有不同类型的节点在由 Html 呈现时实际上看起来相同(例如“b”和“strong”)。

甚至有不同层次的节点阻止我在 XPath 上使用通配符(“*”)来解决它(例如单个标签或嵌套的两个标签)

我的目标:

  1. 编写 XPath 以到达具有值的每个不同节点子集
  2. 将所有节点放在一个集合中
  3. 根据每个节点在 Html 中的位置对该集合的节点进行排序(首先出现在 HTML 中的节点将位于列表的开头)

知道如何实现我的目标吗?

HTML 示例:

您可以给它支票 here

或通过在 CNPJ 文本框中键入 12272084000100 查询自己的服务并点击“Pesquisar”。之后,您只需单击文本“Companhia Eletrica de Alagoas”

提前致谢

最佳答案

我刚找到一个可以在 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>();

关于c# - 根据它们在 HTML 页面上的位置对 HtmlNodes 进行排序 (C#/XPath),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13455265/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com