3

繰り返し発生するXML要素があります

<comment>
    <cmnt_reas_typ>reason1</cmnt_reas_typ>
    <cmnt_txt>ABC</cmnt_txt>
</comment>
<comment>
    <cmnt_reas_typ>reason1</cmnt_reas_typ>
    <cmnt_txt>ABC</cmnt_txt>
</comment>
<comment>
    <cmnt_reas_typ>reason2</cmnt_reas_typ>
    <cmnt_txt>ABC</cmnt_txt>
</comment>

cmnt_txt基本的には、特定のに対して1回だけ表示したいcmnt_reas_typ。したがって、上記の例から、 「reason1」cmnt_txtに対して「ABC」を1回だけ表示したいと思います。cmnt_reas_typしかし、問題はcmnt_reas_typ動的な値であり、XPathでハードコーディングすることはできません。cmnt_txtこれに対して1つだけを返すという言い方はありcmnt_reas_typますか?または、XPathがブール値を返す場合でも、trueそれが2回目に発生する場合は、それでもcmnt_reas_typ問題ありません。XPATH1.0用です。

4

3 に答える 3

0

XPATH 2.0では、次を使用できますdistinct-values()

予想されるXPATHは次のようになります

構文:

distinct-values(//comment[cmnt_reas_typ='PASS-YOUR-DYNAMIC-VALUE']/cmnt_txt)

例:

distinct-values(//comment[cmnt_reas_typ='reason1']/cmnt_txt)

ユニークな結果のリストが表示され、画面に1つずつ表示されます。

于 2012-11-14T16:31:27.230 に答える
0

このxpathは、XPATH1.0でそれぞれにcomment固有の要素を持つ要素のみを返します。cmnt_txtcmnt_reas_type

comment[not(. = preceding::comment)]
于 2012-11-14T17:39:28.013 に答える
0

私があなたの必要性を正しく理解しているなら、あなたはすべてのコメントタイプが1つのコメントテキスト(最初のもの)を生成することを望みますよね?その場合、私はこのXPathを思いつきました。

//cmnt_txt[not(../cmnt_reas_typ/text() = ../preceding::cmnt_reas_typ/text())]

これは、先行するどのノードとも等しくないすべてのcmnt_textノードを取ります。したがって、私が見逃したものがなければ、それはすべてのタイプの最初のものだけを取るべきです。cmnt_reas_typcmnt_reas_typcmnt_text

于 2012-11-14T17:51:56.270 に答える