XSLT 检查每个中是否出现大小写并使用信息

  • 本文关键字:大小写 信息 是否 XSLT xslt
  • 更新时间 :
  • 英文 :


我没有办法解决这个问题,因为我无法更改XSLT中变量的值。 希望您能为以下问题提供适当的方法:

这是一个示例 xml-node,我将引用它来解释这个问题:

<information>
<uselessNode1></uselessNode1>
<uselessNode2></uselessNode2>
<importantNode></importantNode>
</information>

我在这里基本上需要的是遍历信息节点的所有子节点。 importantNode是可选的,我必须检测的是这个节点是否存在。 如果 importantNode 在那里,它将在 for-each 循环中进行处理,一切都很好。 如果没有importandNode,我必须证明它在for-each循环之外是缺失的。

因此,如果在信息节点的模板中具有以下 for-each 循环:

<xsl:for-each select="*"> 
<xsl:choose>
<xsl:when test="not( name() = 'importantNode')">
USELESS
</xsl:when>
<xsl:otherwise>
IMPORTANT
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

输出为"无用无用重要"。如果重要节点不存在,则输出为 "没用没用"。我实际需要的而不是"无用无用"的提示,它表明重要节点不存在,例如"无用无用IMPORTANT_MISSING"。

如果进入 -case 并尝试 在 for-each 循环之外检查这一点会引发错误,即变量$importantFound未声明或超出其范围。我虽然在 for-each 循环之前声明它会有所帮助。由于我无法在 for-each 循环之前声明变量并在循环内的其他情况下更改其值,因此我不知道如何解决这个困境。

我希望对我问题的解释足够清楚,可以理解。 提前谢谢大家。

如果没有importandNode,我必须证明它在for-each循环之外是不存在的。

那么为什么你不能做到这一点 - 例如:

<xsl:template match="information">
<xsl:for-each select="*"> 
<xsl:choose>
<xsl:when test="not(self::importantNode)">USELESS </xsl:when>
<xsl:otherwise>IMPORTANT </xsl:otherwise>
</xsl:choose>
</xsl:for-each>
<xsl:if test="not(importantNode)">IMPORTANT_MISSING</xsl:if>
</xsl:template>

最新更新