3

「FLAC」など、tdからテキストの一部のみを抽出したいと思います。XPathを使用してどのように行うことができますか?

// text()[contains(。、'FLAC')]を試しましたが、テキスト全体が返されます。

                    <tr>
                        <td class="left">Format plików</td>
                        <td>
                                                                AVI, FLV, RM, RMVB, FLAC, APE, AAC, MP3, WMA, OGG, BMP, GIF, TXT, JPEG, MOV, MKV, DAT, DivX, XviD, MP4, VOB
                                                        </td>
                    </tr>
4

1 に答える 1

11

最初にツリーのどこを指定する必要があります。複数の<td>要素があるため、最初にテキストを含むノードを検索します。

substring(//tr/td[contains(@class, 'left')]/following-sibling::text()[1], startIndex, length)

また

substring(//tr/td[@class='left']/following-sibling::text()[1], startIndex, length)

コメントに従って更新します。

T / F contains(// tr / td [@ class ='left'] / follow-sibling :: text()[1]、'FLAC')

これにより、兄弟要素のT / Fが得られ、その後に「FLAC」という単語が表示されます。substring()を使用してその文字列のサブセットを取得できますが、これは静的な場合のみです。XSLTなどの別の方法を使用して、文字列を変更/分離することをお勧めします。お役に立てれば!

アップデート2

substring('FLAC',1,4*contains(//tr/td[@class='left']/following-sibling::text()[1], 'FLAC'))

検査しているノードにFLACが存在する場合はFLACが返され、存在しない場合は空白になります。

ステップバイステップの内訳:

  1. //tr/td[@class='left']-これは、属性「class」が「left」に設定されているすべて のノードを返します。<td>

  2. /following-sibling::text()-これは、上のノードの後のすべてのノードのテキストを返します。

  3. [1]を追加すると、上記のリストから最初のノードが返されます。

  4. これをcontains(aboveValue、'FLAC')でラップすると、テキストに'FLAC'が存在する場合はTRUE(またはこの例では1)が返され、存在しない場合はFalse(0)が返されます。

  5. これらすべてをsubstring('FLAC'、1,4 * aboveValue)でラップすることは、XPath1.0のIf/ Then / Elseと同等です。これは、そうするための組み込み関数がないためです。現在、文字列全体である部分文字列1,4 *(true = 1)=4をプルします。'FLAC'が存在しない場合は、サブストリング1,4 *(false = 0)= 0をプルします。これは、ストリングのいずれでもありません。

もう1つの注意点として、contains()では大文字と小文字が区別されるため、このフィールドに「flac」を含めることができる場合は、falseが返されます。FLACのすべてのケースミックスを確認するには、ここに示す例のtranslate()を使用します。

于 2012-05-15T12:21:57.477 に答える