xpath表达式中的属性和count()

JAN*_*JAN 0 xml xpath count

给出以下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>
Run Code Online (Sandbox Code Playgroud)

我如何找到以下表达式:

1. count(/*/*/*)  =  5
2. count (/*//*)  = 6
3. count (/*/*//@*) = 4
Run Code Online (Sandbox Code Playgroud)

我用Java中的那些xpath表达式运行xml文件,但我不明白为什么答案是5,6,4.

有人可以解释我怎么能计算出上述公式(不使用java代码),而是要了解这些命令的实际概念/*/*/*,并/*//*/*/*//@*

非常感激

Dim*_*hev 5

/*/*/*
Run Code Online (Sandbox Code Playgroud)

这将选择顶级元素的所有"大儿-它们是:c,d,c,d

/*//*
Run Code Online (Sandbox Code Playgroud)

这就选择了顶部元件的所有后代元素:b,c,d,b,c,d,e,f

/*/*//@*
Run Code Online (Sandbox Code Playgroud)

这将选择两种或顶元素的儿童及其后代的所有属性:n,o,p,n,o,p,q,r,s.

因此,产生的计数必须分别为:

4, 8, 9
Run Code Online (Sandbox Code Playgroud)

基于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>
Run Code Online (Sandbox Code Playgroud)

当对提供的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>
Run Code Online (Sandbox Code Playgroud)

将评估Xpath表达式并将其结果复制到输出中:

   4
=========
   8
=========
   9
Run Code Online (Sandbox Code Playgroud)