我有动态的 xml 文件。元素有很多,有些可能有属性,也可能没有。这是在 xsd 文件中定义的。
我使用递归方法(for-each)来一一显示节点内容。但是,如果任何标签具有任何属性,则条件不匹配,并且不会显示该标签的内容。
我想检查当前元素是否有任何属性。如果有则还显示内容,否则也显示标签的内容。
我的 xslt 的一段代码:
<xsl:template match="node()" mode="chapter">
<xsl:for-each select="node()">
<xsl:if test="current()[name() = 'CHAPTER']">
<fo:block>
<xsl:apply-templates select="current()[name() = 'CHAPTER']" mode="chapter" />
</fo:block>
</xsl:if>
</xsl:for-each>
</xsl:template>
在上面的代码中,在一个 xml 输入中,CHAPTER 标记有一个属性。因此,if 条件变为 false,并且尽管当前节点是 CHAPTER,但它不会进入 if block 。
我想检查CHAPTER是否有任何属性。 请提出建议。
提前谢谢您。
最佳答案
您可以在条件中添加另一个谓词,例如:
<xsl:if test="name() = 'CHAPTER' and not(@*)">
这不会处理带有属性的CHAPTER
节点。
关于XSLT如何检查当前节点是否有任何属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23193520/