1

次のような HTML があります。

<tr class="odd">
  <td class="player large-link">
    <a name="some name"/> <!-- I want to return this but two times. -->
  </td>
  <td class="bookings">
    <span/>
    <span/>
  </td>
</tr>

<a name="some name"/>2つに基づいて要素を2回返すことは可能<span/>ですか? 私の英語について申し訳ありません。

4

3 に答える 3

1

<a name="some name"/>2つに基づいて要素を2回返すことは可能<span/>ですか?

単一のXPath1.0式ではありません-XPath1.0式によって選択されたノードは、いわゆる「ノードセット」を形成します-これは真のセットです-重複排除されます。

Xpath 2.0では、ノードのシーケンスを構築でき、シーケンスには同じノードを複数回含めることができます。

/*/*/a[@name='some name']/*[1]/.., /*/*/a[@name='some name']/*[2]/..

上記のXPath2.0式は、2つの必要な同一の要素を含むシーケンスを指定します。

于 2012-10-03T04:16:34.067 に答える
1

XPath 1.0 はノード セットの概念を使用しますが、XPath 2.0 はシーケンスを使用します。ノード セットは真のセットであるため、同じノードをノード セットのメンバーにすることはできません。ただし、次善の策として、識別されたspanノードのセットを高水準言語で反復し、ノード上の各スパン ノードに対して何らかのアクションを実行することができaます。

たとえば、XSLT 内で XPath を使用しているとします。次に、XSLT 1.0 スタイルシートのこのフラグメントは、aノードの数だけノードに対して何らかのアクションを実行しますspan。このフラグメントは、開始時にフォーカス ノードがノードの親であることを前提としていtrます。

<xsl:for-each select="tr/td[@class="bookings"]/span">
  <xsl:for-each select="(../../td[@class='player large-link']/a[name='@some name'])[1]">
    <!-- The `a` node is now the focus node. -->
    <!-- Insert desired action here on the focus node. -->
  </xsl:for-each>
</xsl:for-each> 
于 2012-10-03T03:46:01.807 に答える
1

これは XPath 1 では不可能ですが、XPath 2 では for..in..return を使用できます。

for $s in tr/td[@class="bookings"]/span return $s/../preceding-sibling::td/a

(html パーサーが終了 td と span タグを挿入したと仮定すると、td は親要素ではなく先行要素になります)

于 2012-10-02T22:19:31.170 に答える