2012-08-07 62 views
0

HTML将被解析:分裂的Xpath在PHP

<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 

所以基本上一切,一切在另一个之后休息。当只有一个值时,两行都必须有。

+1

我认为容易裂开如果使用不同的格式,这会更容易。为什么不在双重条件发生时嵌套表格而不是使用
标签?如果您打算使用HTML,我会建议您利用它多用一些的结构特征。 – thatidiotguy 2012-08-07 17:16:48

回答

0

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

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

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检测到它是这种情况下,与返回相应的元组(S )。

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

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个元件