XSLT if Last节点

时间:2014-03-12 16:09:31

标签: xml xslt xslt-1.0

这是我的XSLT 1.0代码:

<xsl:for-each select = "segment">
    <xsl:if test ="position() != 1 or position() != last()">
      <notfirstorlast></notfirstorlast>    
     </xsl:if> 
</xsl:for-each>

这应该添加一个<notfirstorlast>元素,该元素在所有<segment>个节点中为第一个和最后一个节点排除。但它不起作用。它将在没有或声明的情况下工作。 这个作品:

<xsl:if test ="position() != 1>

我的陈述有问题。

1 个答案:

答案 0 :(得分:6)

必须满足这两个条件,因此您必须使用“和”代替“或”:

<xsl:if test ="position() != 1 and position() != last()">
  

我的陈述有问题。

是的,确切地说。使用“或”,所有元素都有资格获得notfirstorlast元素,因为所有元素都是“不是第一个”或“不是最后一个”元素。< / p>

<强>输入

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <segment/>
    <segment/>
    <segment/>
</root>

<强>样式表

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>

<xsl:template match="/root">
  <xsl:for-each select = "segment">
  <xsl:copy>
    <xsl:if test ="position() != 1 and position() != last()">
      <notfirstorlast></notfirstorlast>    
     </xsl:if>
  </xsl:copy>
</xsl:for-each>
</xsl:template>

</xsl:stylesheet>

<强>输出

<?xml version="1.0" encoding="utf-8"?>
<segment/>
<segment>
   <notfirstorlast/>
</segment>
<segment/>