簡體   English   中英

xpath表達式中的屬性和count()

[英]Attributes and count() in xpath expression

給定以下XML文件:

<a m="1">
    <b n="1" o="2">
        <c p="3">3</c>
        <d/>
    </b>
    <b n="1" o="2">
        <c p="3">3</c>
        <d q="3">
            <e r="2">2</e>
        </d>
        <f s="1"/>
    </b>
</a>

我如何找到以下表達式:

1. count(/*/*/*)  =  5
2. count (/*//*)  = 6
3. count (/*/*//@*) = 4

我用Java中的xpath表達式運行了xml文件,但我不明白為什么答案是5,6,4。

有人可以解釋我如何計算上述表達式(不使用Java代碼),但要理解命令/*/*/*/*//*/*/*//@*的實際概念嗎?

非常感激

/*/*/*

這會選擇所有“頂級元素的孫子元素”,它們是: cdcd

/*//*

這將選擇頂部元素的所有后代元素: bcdbcdef

/*/*//@*

這將選擇top元素的子元素或其后代的所有屬性: nopnopqrs

因此,產生的計數必須分別為:

4, 8, 9

基於XSLT的驗證

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="text"/>

 <xsl:template match="/">
   <xsl:value-of select="count(/*/*/*)"/>
=========
   <xsl:value-of select="count(/*//*)"/>
=========
   <xsl:value-of select="count(/*/*//@*)"/>
 </xsl:template>
</xsl:stylesheet>

在提供的XML文檔上執行此轉換時 (永遠不要在文檔中顯示圖片!!!):

<a m="1">
 <b n="1" o="2">
   <c p="3">3</c>
   <d/>
 </b>
 <b n="1" o="2">
   <c p="3">3</c>
   <d q="3">
     <e r="2">2</e>
   </d>
 </b>
 <f s="1"/>
</a>

計算Xpath表達式,並將其結果復制到輸出

   4
=========
   8
=========
   9

1-查找元素的直接后代,它們是根元素的直接后代的直接后代

/a/b[1]/c
/a/b[1]/d

/a/b[2]/c
/a/b[2]/d
/a/b[2]/f

是你的答案。

2-在元素的第一級下的所有后代(直接或間接)元素

/a/b[1]/c
/a/b[1]/d

/a/b[2]/c
/a/b[2]/d
/a/b[2]/d/e
/a/b[2]/f

是你的答案。

3-查找屬於第一級元素的直接后代的所有后代的所有屬性

/b[1]/@n
/b[1]/@o
/b[1]/c/@p

/b[2]/@n
/b[2]/@o
/b[2]/c/@p
/b[2]/d/@q
/b[2]/d/e/@r
/b[2]/f/@s

是你的答案。

如您所見,第3種情況的答案是9,因為您寫錯了。 要使其返回,必須將其更改為count(/*/*/*/@*)

編輯 :修正了Mimo指出的索引。

再次運行Java代碼,但沒有count函數。 您將獲得節點列表(有時是元素,有時是屬性)。 遍歷列表並寫出每個節點的名稱。 這將幫助您了解每個計數中包括哪些節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM