XSLT use/declare 来自其他节点的变量,过滤掉不同节点的数据

XSLT use/declare variable from other node to filter out different node data

我找不到显示问题的问题 :/ 我是 xslt 的新手,也许有人可以将我转发到正确的站点。

这个任务对我来说似乎很简单: 我想声明一个变量以在一个节点中使用(用于过滤掉),该变量来自另一个节点中的检查。我习惯了 sql 和数据库,我的方法在这里可能是错误的。 情况:

  <NODES1>
  <NODE1 INTV="0" INDEX_ZONE="1"  /> 
  <NODE1 INTV="1" INDEX_ZONE="2"  />
  <NODE1 INTV="1" INDEX_ZONE="2"  />  
  <NODE1 INTV="1" INDEX_ZONE="3"  /> 
  <NODE1 INTV="2" INDEX_ZONE="5"  /> 
  <NODE1 INTV="2" INDEX_ZONE="6"  />
  <NODE1 INTV="2" INDEX_ZONE="7"  />
  <NODE1 INTV="2" INDEX_ZONE="8"  />
  </NODES1>
  </NODES2><
  <NODE2 INTV="0" SPTYP="good" /> 
  <NODE2 INTV="1" SPTYP="medium" /> 
  <NODE2 INTV="2" SPTYP="bad" /> 
  </NODES2>

在我的样式表中,我想查看数据“错误”的所有 NODE1。 属性 INTV 包含一个数字,密钥对位于 NODES2.

所以根据我的 SQL 想法,我需要某种:

 <xsl:variable name="BAD" select="NODES2/@SPTYP"/> PLUS "WHERE INTV = 2" :D ;D 

然后在 NODES1 中添加一个 if:

<xsl:for-each select="NODES1">
      <xsl:choose>
        <xsl:when test="@INTV = $BAD">

有人知道这个主意并可以帮忙吗? 我什至不知道在 xslt 中是否可以进行这种操作。

提前致谢。

要select按条件,您需要在XPath中使用方括号。
<xsl:variable name="BAD" select="//NODES2/NODE2[@INTV=2]/@SPTYP"/>
这会将变量设置为 'bad'.
我不确定你的 XSL 代码的第二部分应该做什么,因为它缺少语句本身(when 基本上是 if/else 条件检查的 if-part)。在当前状态下,它只检查名为 INTV 的属性是否等于 $BAD.

的变量内容

也许您可以提供示例输出,然后我将编辑问题第二部分的答案。