3

私はここにソースコードを含むこの表を持っています

ここに画像の説明を入力してください

すべての行を取得したいのですが、次を使用して実行できます。

ここに画像の説明を入力してください

を使用して期待される最終出力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

私の質問は、これを取得するために、最終出力から3番目の列(この例では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')]

4

2 に答える 2

2

このXPath2.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;')
于 2012-08-03T12:37:36.283 に答える
2

3番目の列を除外するには、

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

を含むリンクを除外するにはleague、次を使用できます。

tbody/tr/td[not(contains(a/@href,'league'))]
于 2012-08-03T10:16:14.813 に答える