0

将被解析的 HTML:

<tr>
 <td>18</td>
 <td>1:0 <img src="./img/goal.gif"></td>
 <td>18</td>
 <td>Player1</td>
 <td>Team1</td>
</tr>
<tr>
 <td>34</td>
 <td><img src="./img/sub.gif"></td>
 <td>13 <img src="./img/in.gif"><br>11 <img src="./img/out.gif"></td>
 <td>Player1<br>Player2</td>
 <td>Team2</td>
</tr>

td[3] 和 td[4] 有时有两个值,当有两个值(除以 br)时,我需要将它们拆分,以便行(在本例中为 tr[2])显示两次,一次与Player1 和 Player2 都这样:

tr[1] 18, goal, 18, Player1, Team1
tr[2] 34, in, 13, Player1, Team2
tr[2] 34, out, 11, Player2, Team2

所以基本上休息前的所有内容都是一个条目的一部分,休息之后的所有内容都是另一个条目。当只有一个值时,两行都必须有它。

4

2 回答 2

1

我认为这在 XPath 1 中是不可能的,但在 XPath 2 中你可以使用:

/tr/(if (.//br) then 
(td[1], "in",  td[3]/text()[1], td[4]/text()[1], td[5],
 td[1], "out", td[3]/text()[2], td[4]/text()[2], td[5])
else (td[1], "goal", td[3], td[4], td[5])
)

使用 //br 来检测它是哪种情况,并返回相应的元组。

由于序列不能嵌套,所以这个查询的结果值是这样的单个序列(带有类型注释)

sequence: (
  node: 18, string: goal, node: 18, node: Player1, node: Team1, 
  node: 34, string: in, node: 13, node: Player1, node: Team2, 
  node: 34, string: out, node: 11, node: Player2, node: Team2)

您可以在每 5 个元素处轻松拆分

于 2012-08-07T22:40:49.597 回答
0

我会假设 <br/> 会工作。但是,请注意您使用的是 <br>(缺少正斜杠)。这会改变你的代码吗?

另外,为什么不使用一些代码来诱导某些行的“rowspan”或“colspan”?

于 2012-08-07T17:14:42.477 回答