gpt4 book ai didi

html - 使用XPath进行HTML解析:扁平化的分层数据

转载 作者:行者123 更新时间:2023-12-03 17:14:57 25 4
gpt4 key购买 nike

我的目标HTML是一个扁平化的元素表,其中包含由class属性定义的2级数据:

<tr>
<td class="type">Type 1</td>
</tr>
<tr>
<td class="name">name1</td>
<td class="year">1970</td>
<td class="rank">1</td>
</tr>
<tr>
<td class="name">name2</td>
<td class="year">1982</td>
<td class="rank">3</td>
</tr>


目标是解析名称,年份,等级元素的列表,这些列表是通过以下xpath表达式完成的:

//td[@class = 'name']/text()
//td[@class = 'year']/text()
//td[@class = 'rank']/text()


每个元素都在紧接之前

<tr>
<td class="type">Type 1</td>
</tr>


我想将“类型1”分配给上面解析的每个元素。它可以是相同长度的单独列表。当然,我的目标HTML在同一2级层次结构中包含许多此类元素:type-元素(名称,年份,等级)。

最佳答案

解决方案1

首先,找到感兴趣的td元素。例如,名称td具有以下伪代码:

name_tds = doc.evalXPath("//td[@class = 'name']")


然后,您可以使用名称 td作为上下文节点找到对应的类型 td,如下所示:

type_td = name_td.evalXPath("../preceding-sibling::tr[td[@class = 'type']][1]/td")


解决方案2

只需迭代所有 td并记住您找到的最后一个类型。伪代码:

foreach (td in doc.evalXPath("//td") {
class = td.getAttribute("class");
if (class == "type") {
type = td.textContent();
}
else if (class == "name") {
name = td.textContent();
println("type: " + type + ", name: " + name);
}
// Same for year and rank.
}

关于html - 使用XPath进行HTML解析:扁平化的分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21972490/

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