2

特定の値を含むが大文字と小文字を区別しない XOM ドキュメントからノードをクエリしたいと考えています。このようなもの:

doc.query('/root/book[contains(.,"case-insentive-string")]')

ただし、大文字と小文字が区別されます。

  1. 正規表現を使用しようとしましたが、XPATH2.0 のみであり、XOM はそれをサポートしていないようです。
  2. 私も試してみ contains(translate(."ABCEDF...","abcdef..."),"case-insentive-string")]' ましたが失敗しました。
  3. サブノードを一致させ、getParent を使用して親属性を読み取ろうとしましたが、親属性を読み取る方法がありません。

助言がありますか ?

4

2 に答える 2

2

2.contains(translate(。 "ABCEDF ..."、 "abcdef ...")、 "case-insentive-string")]'も失敗しました。

これを書く適切な方法は次のとおりです。

/root/book[contains(translate(., $vUpper, $vLower),
                    translate($vCaseInsentiveString, $vUpper, $vLower)
                    )
          ]

ここで$vUpper、および$vLowerは文字列として定義されます(置換する必要があります)。

'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

'abcdefghijklmnopqrstuvwxyz'

大文字と$vCaseInsentiveString小文字を区別しない特定の文字列として定義されます(置換する必要があります)。

たとえば、次のXMLドキュメントがあるとします

<authors>
  <author>
    <name>Victor Hugo &amp; Co.</name>
    <nationality>French</nationality>
  </author>
  <author period="classical" category="children">
    <name>J.K.Rollings</name>
    <nationality>British</nationality>
  </author>
  <author period="classical">
    <name>Sophocles</name>
    <nationality>Greek</nationality>
  </author>
  <author>
    <name>Leo Tolstoy</name>
    <nationality>Russian</nationality>
  </author>
  <author>
    <name>Alexander Pushkin</name>
    <nationality>Russian</nationality>
  </author>
  <author period="classical">
    <name>Plato</name>
    <nationality>Greek</nationality>
  </author>
</authors>

次のXPath式(変数を対応する文字列に置き換えます):

   /*/author/name
              [contains(translate(., $vUpper, $vLower),
                        translate('lEo', $vUpper, $vLower)
                        )
              ]

この要素を選択します

<name>Leo Tolstoy</name>

説明:関数の両方の引数がcontains()小文字に変換されてから、比較が実行されます。

于 2011-01-29T17:15:24.923 に答える
2

XOM を使用している場合は、Saxon を使用してそれに対して XPath または XQuery を実行できます。これにより、関数 lower-case() および upper-case() を含む XPath 2.0 で大幅に拡張された関数ライブラリを使用できるようになり、独自の照合順序を選択することもできます (多少製品固有の方法で)。 contains() などの関数で使用します。これは、たとえば、大文字と小文字だけでなくアクセントも無視するマッチングを実行できることを意味します。

于 2011-01-29T18:23:13.290 に答える