XSLT如何检查当前节点是否有任何属性

标签 xslt

我有动态的 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/

相关文章:

regex - XSLT,使用正则表达式从 xml 中提取子字符串

C# 如何对内存对象执行实时 xslt 转换?

javascript - 当我处于 td 级别时,如何从 xsl html 表格行中提取数据?

xml - 当匹配某个属性的值时,将一个完整的元素复制到新的 XML,并使用 XSLT 更改内部另一个属性的值

c# - 在 XSLT 中组合相同的子元素

javascript - 如何使用 javascript 正确隐藏 XSL 处理的 XML 元素列表

xslt - 没有在 xslt transformer mule esb 中获得值(value)

XSLT 字符串解析

asp.net - 如何在命名空间中选择 xml 元素?

java - 在 IBM Content Navigator 插件中使用 XSLT