XSLT检查每一个的大小写是否出现在中,并使用这些信息

XSLT检查每一个的大小写是否出现在中,并使用这些信息,xslt,Xslt,我没有办法做到这一点,因为我无法更改XSLT中变量的值。 希望您能为以下问题提供适当的解决方法: 这是一个示例xml节点,我将引用它来解释问题: <information> <uselessNode1></uselessNode1> <uselessNode2></uselessNode2> <importantNode></importantNode> </information>

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

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

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

这里我需要的是遍历信息节点的所有子节点。 importantNode是可选的,我要检测的是这个节点是否存在。 如果importantNode在那里,它将在for-each循环中处理,一切都很好。 如果没有importandNode,我必须在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>

无用的
重要的
输出是“无用的重要”。如果重要节点不存在,则输出为 “无用的”。实际上,我需要的不是“无用无用无用”而是一个提示,它表明重要节点不在那里,例如“无用无用重要_缺失”

我尝试在for-each循环中设置一个变量,如果进入-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>

无用的
重要的
重要人物失踪

这是双重检查,作为一名软件工程师,我不习惯这样做,但使用XSLT显然是不可避免的。我必须习惯它。谢谢这非常明显,并且完全符合我的要求。实际上,这不是重复检查,因为
xsl:for-each
不是一个循环。如果需要,可以使用递归命名模板,并在迭代之间传递额外的参数。但这将是更多的代码,更尴尬。