我想使用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。
编辑:错误的问题。
答案 0 :(得分:2)
几乎。
following-sibling
轴获取下一个元素(following-sibling::*[1]
) [*] self
轴检查该元素本身是否为<list>
([self::list]
)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>