0

XPathでは、特定の要素に焦点を当てて分析したいと思います。

...
<field>aaa</field>
...
<field>bbb</field>
...
<field>aaa (1)</field>
...
<field>aaa (2)</field>
...
<field>ccc</field>
...
<field>ddd (7)</field>

テキストコンテンツである要素を見つけたいと思います(可能な列挙は別として、一意です。上記の例では、bbb、ccc、およびdddになります。

次のXPathは、一意の値を提供します。

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))

ここで、それを拡張し、すべての個別の値に対して別のXPathを実行します。つまり、いずれかで始まるフィールドの数をカウントし、カウントが1より大きいフィールドを取得します。

これらは、その特定の値に等しいフィールドコンテンツであるか、その値で始まり、その後に「(」が続く可能性があります。問題は、そのXPathの2番目の部分で、その部分自体のコンテキストを参照する必要があることです。同時に前者の文脈に。

次のXPathでは、「。」を使用する代わりに-を使用します。コンテキストとして-c_outerとc_innerを使用します。

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))[count(//field[(c_inner = c_outer) or starts-with(c_inner, concat(c_outer, ' ('))]) > 1]

「。」は使えません。明らかな理由で両方のために。しかし、どのようにして特定の値、または内部式内の外部式から現在の個別の値を参照できますか?

それも可能でしょうか?

4

1 に答える 1

0

XQueryはそれを行うことができます例えば

  for $s 
  in distinct-values(
    //field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))
  where count(//field[(. = $s) or starts-with(., concat($s, ' ('))]) > 1
  return $s
于 2011-11-24T14:10:47.427 に答える