[英]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代碼),但要理解命令/*/*/*
和/*//*
和/*/*//@*
的實際概念嗎?
非常感激
/*/*/*
這會選擇所有“頂級元素的孫子元素”,它們是: c
, d
, c
, d
/*//*
這將選擇頂部元素的所有后代元素: b
, c
, d
, b
, c
, d
, e
, f
/*/*//@*
這將選擇top元素的子元素或其后代的所有屬性: n
, o
, p
, n
, o
, p
, q
, r
, s
。
因此,產生的計數必須分別為:
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.