2012-08-03 43 views
3

我有这个表的源代码HERE获取从表的具体数据使用XPath

enter image description here

我想所有的行,我至极可以用做:

enter image description here

使用string-join($doc//*[@id='salaries']/tbody/tr/normalize-space(.), '
')的预期最终输出是:

1985-86 Los Angeles Lakers NBA $2,030,000 
1987-88 Los Angeles Lakers NBA $2,000,000 
1988-89 Los Angeles Lakers NBA $3,000,000 

我的问题是,如何从最终输出中删除第三列(在这个例子中入选NBA)得到这个:

1985-86 Los Angeles Lakers $2,030,000 
1987-88 Los Angeles Lakers $2,000,000 
1988-89 Los Angeles Lakers $3,000,000 

PS:我不知道该列始终在那个地方,但固定包含在它的联赛a[contains(@href, 'league')]

+2

而非图片,你能显示源? – choroba 2012-08-03 09:56:31

+0

@choroba,是的,我忘了它xD ...发布更新:) – Enissay 2012-08-03 10:08:57

回答

2

此XPath 2.0表达式

for $i in 1 to count(/tbody/tr), 
     $r in /tbody/tr[$i], 
     $s in string-join($r/td[not(position() eq 3)]/normalize-space(.), ' ') 
    return 
    concat($s, '
') 

所提供的XML文档评价时:

<tbody> 
<tr class="" data-row="0"> 
    <td align="left">1985-86</td> 
    <td align="left"><a href="/teams/LAL/1986.html">Los Angeles Lakers</a></td> 
    <td align="left"><a href="/leagues/NBA_1986.html">NBA</a></td> 
    <td align="right" csk="2030000">$2,030,000</td> 
</tr> 
<tr class="" data-row="1"> 
    <td align="left">1987-88</td> 
    <td align="left"><a href="/teams/LAL/1988.html">Los Angeles Lakers</a></td> 
    <td align="left"><a href="/leagues/NBA_1988.html">NBA</a></td> 
    <td align="right" csk="2000000">$2,000,000</td> 
</tr> 
<tr class="" data-row="2"> 
    <td align="left">1988-89</td> 
    <td align="left"><a href="/teams/LAL/1989.html">Los Angeles Lakers</a></td> 
    <td align="left"><a href="/leagues/NBA_1989.html">NBA</a></td> 
    <td align="right" csk="3000000">$3,000,000</td> 
</tr> 
</tbody> 

产生想要的,正确的结果:

1985-86 Los Angeles Lakers $2,030,000 
1987-88 Los Angeles Lakers $2,000,000 
1988-89 Los Angeles Lakers $3,000,000 

如果要排除的列的位置是不能保证是固定的,使用

for $i in 1 to count(/tbody/tr), 
     $r in /tbody/tr[$i], 
     $s in string-join($r/td[not(starts-with(a/@href,'/leagues'))] 
           /normalize-space(.), ' ') 
    return 
    concat($s, '&#xA;') 
+0

Awsome,我从来没有见过一个像这:o ...像平常一样完美:) – Enissay 2012-08-03 13:18:51

+0

@ Enissay:不客气。我很好奇 - 你的平台是什么?您使用哪种特定的XPath 2.0处理器以及使用哪种主机语言? – 2012-08-03 13:20:11

+0

那么,正如我在我以前的问题中所说的,我在Web-Harvest的脚本中使用了这个...以下是一些示例:http://web-harvest.sourceforge.net/samples.php ...我希望这个答案您的问题:) – Enissay 2012-08-03 13:51:18

2

要exlude第三列,使用

tbody/tr/td[position()!=3] 

要exlude含有的链接,你可以使用

tbody/tr/td[not(contains(a/@href,'league'))] 
+0

嗯,我已经尝试过,但我无法设法得到上面的最终输出:/ – Enissay 2012-08-03 10:36:38