1

XMLドキュメントがある場合:

<?xml version="1.0" encoding="utf-8"?>
<STICKERINFO>
    <ORDER>
        <NUMBER>0171467783</NUMBER>
        <STICKER>
            <ARTICLE>03359140001</ARTICLE>
        </STICKER>
        <STICKER>
            <ARTICLE>11408038001</ARTICLE>
        </STICKER>
    </ORDER>
    <ORDER>
        <NUMBER>0171473000</NUMBER>
    </ORDER>
</STICKERINFO>

私はそれが存在することを確認でき/STICKERINFO/ORDER/STICKER/ARTICLEます:

boolean(/STICKERINFO/ORDER/STICKER/ARTICLE)

しかし、/ STICKERINFO / ORDER / STICKER / ARTICLEがすべて /STICKERINFO/ORDER/に存在するかどうかを確認するにはどうすればよいですか?

現在の例では、XPATH式はfalse

4

2 に答える 2

4

このXPath1.0(およびXPath 2.0)式

boolean(/STICKERINFO/ORDER[not(STICKER/ARTICLE)])

子孫を持たない要素がtrue()少なくとも1つある場合に生成されます。/STICKERINFO/ORDERSTICKER/ARTICLE

したがって、あなたが求めているXPath式(の1つ)は次のとおりです。

not(/STICKERINFO/ORDER[not(STICKER/ARTICLE)])

説明

これは、二重否定法の単純な適用です。:)

于 2012-10-12T12:30:12.603 に答える
3

XPath 2.0には、そのための「すべて」があります。

 every $order in /STICKERINFO/ORDER satisfies boolean($order/STICKER/ARTICLE)

また、XPath 1では、すべての注文に記事があるかどうか、つまり注文の数が記事のある注文の数と同じであるかどうかをテストできます。

  count(/STICKERINFO/ORDER) =  count(/STICKERINFO/ORDER[STICKER/ARTICLE])
于 2012-10-12T07:06:07.513 に答える