【发布时间】:2014-02-23 18:23:55
【问题描述】:
我的目标 HTML 是一个扁平的元素表,其中包含由类属性定义的 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 级层次结构中包含许多这样的元素:类型 - 元素(名称、年份、等级)。
【问题讨论】:
-
您可以使用 XSLT 分组(如果您只支持 XSLT 1.0,则可以使用 muenchian 分组)。但使用串行解析器 (SAX) 可能更容易,您可以在其中跟踪读取的
type类的最后一个元素并将数据附加到后面的节点。 -
是的,SAX 解析器是一种比较明显的方法,我之前花了相当多的时间用 SAX 解析这样的 HTML。通常,由于要解析多个 HTML,因此代码变得庞大而难以维护。我希望有一些 xpath 魔法......
-
因此,对于 XSLT 分组,您建议首先使用 XSLT 将其转换为更统一的 XML,然后应用 XPath...这看起来是一种有效的方法,谢谢!现在仍然希望只有 XPath 的解决方案。