2011-12-08 10 views
2

特定の単語を含むノードの数を数えようとしています。試合の総数をどのように数えますか?一致する文字列の数を数えるためにXQueryで使用する式は何ですか?

<Fruit> 
    <type>apple</type> 
    <type>orange</type> 
    <type>apple</type> 
    <type>apple</type> 
</Fruit> 

したがって、Appleのカウントは3です。どのように取得するのですか。私は情報を得ることができましたし、正規化した後、私はプリントアウトすることができます。

<text>apple orange apple apple</text> 

答えて

4
let $a := <Fruit> 
    <type>apple</type> 
    <type>orange</type> 
    <type>apple</type> 
    <type>apple</type> 
</Fruit> 
return 

count($a/type[text() eq 'apple']) 

eqを使用し、正確な値を有する要素をカウントするには、あなたにあっ

+0

「text()」ではなく「.'または 'string(。)」をおすすめします。 'text()'は、 ''にマークアップが含まれていると物が壊れる可能性があります。もし決してそれが決してわからなくても、ノードの文字列値の代わりに 'text()'を使うことは考えられません。 'text()'は通常、XQueryのコードの匂いです。 –

+0

yaよかったですが、opはtext()、つまりtext()の選択に特に取り組んでいましたが... internetsで私に従っていますか? –

+0

はい、「xquery」と同義である限り(これはTwitterの場合です):-) –

1

を取得する必要があります:

count(/Fruit/type[. eq 'apple']) 

特定の部分文字列を含む要素を数えるには、:

count(/Fruit/type[contains(.,'apple')]) 

<type>this is an apple</type>も含まれます。

一般的な単語検索では、XQuery 1.0以上のものが必要です。あなたはMarkLogicを使用している場合たとえば、あなたが行うことができます。また、<type>Apples</type>のようなものと一致します

count(/Fruit/type[cts:contains(.,'apple')]) 

を。

関連する問題