Xpath/XSLT:检查以下兄弟节点是否是特定节点

Xpath/XSLT:检查以下兄弟节点是否是特定节点

问题描述:

我已经看到了基于节点值应用了以下兄弟节点的问题,但我的问题与实际节点本身有关。Xpath/XSLT:检查以下兄弟节点是否是特定节点

这是我必须有XML类型:

<Employee> 
    <Summary> 
     <A> 
     <B> 
    </Summary> 
    <Elections> 
    </Elections> 
<Employee> 

我需要如下写的Xpath条件:

if (NOT(the following sibling(first sibling) of /Employee/Summary is Elections)), then do something. 

目前我有:

<xsl:if test="(not(following-sibling::Employee/Summary[1]='Earnings')) 
    <xsl:call-template name="EmployeeRecord"/> 
</xsl:if> 

请请注意,我没有检查节点值,而是节点本身(即节点名称)。 任何帮助正确的方向将不胜感激。

+0

什么是当前节点?概述的条件完全不符合您当前的xslt。你能否用文字说明你在文档中的位置以及你想要达到的目标? –

您正处于正确的轨道上。 following-sibling轴将在上一步中从上下文节点进行评估。

  • ,如果你正在寻找是/Employee/Summary以下同胞的第一个元素,可以使用:/Employee/Summary/following-sibling::*[1]

  • 为了评估第一个后续兄弟是否是Elections元素,可以使用额外的谓词过滤器[self::Elections]

  • 测试为的否定,包住整个事情not()

全部放在一起,调整你的例子:

<xsl:if test="not(/Employee/Summary/following-sibling::*[1][self::Elections])"> 
    <xsl:call-template name="EmployeeRecord"/> 
</xsl:if> 
+1

我以前没见过'self'部分,所以对于像我这样的其他人来说,命名空间(ns)就是:'[self :: ns:Elections]' – BurnsBA

我需要如下写的Xpath条件:

if (NOT(the following sibling(first sibling) of /Employee/Summary is Elections)), then do something. 

使用

not(/Employee/Summary/following-sibling::*[1][self::Elections]) 

被指定为参数传递给not()函数中的XPath表达式选择任何Elections元件,其任何Summary元件,其所述顶部元件Employee的孩子的第一以下-同级元素。

如果这不选择任何节点,则上面的XPath表达式计算为true()