获取XSL中位置的下一个标记名称

时间:2014-07-17 13:57:56

标签: html xml xslt if-statement

我想使用test检查下一位父级是foo还是position(.)+1(这是个想法)。

XML:

<text>
   <list>
      in list
   </list>
   <table>
      I'M HERE
   </table>
</text>
<foo>
   <hey>
   </hey>
</foo>

我可以这样做吗?

XSL:

<xsl:if test="position(.)+1 = 'foo'">
  <xsl:value-of select="'Next tag is foo'" />
</xsl:if>

我想知道我是否可以在<xsl:if>中添加两个条件:

我的输出是html。

编辑:错误的问题。

2 个答案:

答案 0 :(得分:2)

几乎。

  1. 使用following-sibling轴获取下一个元素(following-sibling::*[1] [*]
  2. 使用self轴检查该元素本身是否为<list>[self::list]
  3. e.g。 [+]

    <xsl:if test="following-sibling::*[1][self::list]">
      <xsl:value-of select="'Next tag is list'" />
    </xsl:if>
    

    [*] following-sibling::*选择所有以下兄弟姐妹,您只想要第一个,因此[1]

    [+] 多个谓词(方括号中的子表达式)必须为连续。这意味着XPath表达式要么选择非空节点集(在布尔测试中求值为true),要么选择空节点集(求值为false)。这里没有必要进行明确的比较。

答案 1 :(得分:1)

您已经显着改变了您的问题。首先,你想要第一个孩子,现在是下面的兄弟,将回答这两个案例,首先解释上述术语:

<text>
  <table></table>    <-- first child       (nested one level)
</text>
<foo />              <-- following sibling (same hierarchy level)

检查<text>的第一个孩子<list>还是<table>

您要查找的查询是:

<xsl:if test="name(*[1]) = 'list' or name(*[1]) = 'table'">

完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/text">
        <xsl:if test="name(*[1]) = 'list' or name(*[1]) = 'table'">
            <xsl:text>first child of text node is list or table</xsl:text>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

检查<text>的以下兄弟是<list>还是<table>

您要查找的查询是:

<xsl:if test="name(following-sibling::*[1]) = 'list' or name(following-sibling::*[1]) = 'table'">

完整示例:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/text">
        <xsl:if test="name(following-sibling::*[1]) = 'list' or name(following-sibling::*[1]) = 'table'">
            <xsl:text>following sibling of text node is list or table</xsl:text>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>