Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xpath 查找与上下文元素相关的条件的直接同级_Xpath - Fatal编程技术网

Xpath 查找与上下文元素相关的条件的直接同级

Xpath 查找与上下文元素相关的条件的直接同级,xpath,Xpath,我有XML结构执行XPath的上下文是类属性为“ac”的元素之一。请帮助我编写XPath,以查找属性为“ac1”的上下文元素的所有直接同级。例如,如果执行上下文是类属性为“ac”的第二个元素,则结果应包含两个(而不是三个)类属性为“ac1”的立即元素 多谢各位 <container> <item class="ac"/> <item class="ac1"/> <item class="ac1"/> <item class="ac1"/>

我有XML结构执行XPath的上下文是类属性为“ac”的元素之一。请帮助我编写XPath,以查找属性为“ac1”的上下文元素的所有直接同级。例如,如果执行上下文是类属性为“ac”的第二个元素,则结果应包含两个(而不是三个)类属性为“ac1”的立即元素

多谢各位

<container>
<item class="ac"/>
<item class="ac1"/>
<item class="ac1"/>
<item class="ac1"/>
<item class="ac"/>
<item class="ac1"/>
<item class="ac1"/>
<item class="ac2"/>
<item class="ac1"/>
<item class="ac"/>
<item class="ac1"/>
<item class="ac1"/>
<item class="ac1"/>
</container>

I.在XPath 1.0中,对两个节点集的交集使用Kayessian方法:

$ns1[count(.|$ns2) = count($ns2)]
<container>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac2"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
</container>
这将选择两个节点集的交点
$ns1
$ns2

在此中替换:

$ns1

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
$ns2

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
得到的XPath表达式是

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
基于XSLT的验证

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>

=========
在提供的XML文档上应用此转换时:

$ns1[count(.|$ns2) = count($ns2)]
<container>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac2"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
</container>

对两个XPath表达式(一个带变量,另一个带替换变量)进行求值,并将它们各自选择的节点复制到输出中

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>

=========

II。XPath 2.0解决方案

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
只需对相同的两个节点集使用标准XPath 2.0操作符


或者,可以使用标准运算符

I。在XPath 1.0中,对两个节点集的交集使用Kayesian方法:

$ns1[count(.|$ns2) = count($ns2)]
<container>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac2"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
</container>
这将选择两个节点集的交点
$ns1
$ns2

在此中替换:

$ns1

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
$ns2

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
得到的XPath表达式是

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
基于XSLT的验证

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>

=========
在提供的XML文档上应用此转换时:

$ns1[count(.|$ns2) = count($ns2)]
<container>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac2"/>
    <item class="ac1"/>
    <item class="ac"/>
    <item class="ac1"/>
    <item class="ac1"/>
    <item class="ac1"/>
</container>

对两个XPath表达式(一个带变量,另一个带替换变量)进行求值,并将它们各自选择的节点复制到输出中

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>

=========

II。XPath 2.0解决方案

/*/*[@class='ac'][1]/following-sibling::*[@class='ac1']
/*/*[@class='ac'][2]
        /following-sibling::*[not(@class='ac1')][3]
                                  /preceding-sibling::*
 /*/*[@class='ac'][4]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][5]
                       /following-sibling::*[not(@class='ac1')][6]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][7]
                       /following-sibling::*[not(@class='ac1')][8]
                                              /preceding-sibling::*
                  )
         ]
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output omit-xml-declaration="yes" indent="yes"/>

 <xsl:variable name="ns1" select=
  "/*/*[@class='ac'][9]/following-sibling::*[@class='ac1']"/>

 <xsl:variable name="ns2" select=
  "/*/*[@class='ac'][10]
        /following-sibling::*[not(@class='ac1')][11]
                                  /preceding-sibling::*"/>

 <xsl:template match="/">
   <xsl:copy-of select=
   "$ns1[count(.|$ns2) = count($ns2)]"/>
=========
   <xsl:copy-of select=
   "/*/*[@class='ac'][12]
         /following-sibling::*[@class='ac1']
           [count(.
                 |
                  /*/*[@class='ac'][13]
                       /following-sibling::*[not(@class='ac1')][14]
                                              /preceding-sibling::*
                  )
           =
            count(/*/*[@class='ac'][15]
                       /following-sibling::*[not(@class='ac1')][16]
                                              /preceding-sibling::*
                  )
         ]
   "/>
 </xsl:template>
</xsl:stylesheet>
<item class="ac1"/>
<item class="ac1"/>
=========
   <item class="ac1"/>
<item class="ac1"/>
只需对相同的两个节点集使用标准XPath 2.0操作符


或者可以使用标准运算符

您能给我们看一下您尝试过的任何东西吗?明天将显示。现在从iPad开始,对不起。Dmitry,现在我不能测试你的代码,但我检查了一下,发现这正是我需要的。我花了很多时间来解决这个问题,不相信有人能帮上忙。你能给我们看看你试过的东西吗?明天就可以了。现在从iPad开始,对不起。Dmitry,现在我不能测试你的代码,但我检查了一下,发现这正是我需要的。我花了很多时间来解决这个问题,不相信有人能帮我。