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>
请请注意,我没有检查节点值,而是节点本身(即节点名称)。 任何帮助正确的方向将不胜感激。
您正处于正确的轨道上。 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>
我以前没见过'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()
。
什么是当前节点?概述的条件完全不符合您当前的xslt。你能否用文字说明你在文档中的位置以及你想要达到的目标? –