我有以下 xml
<root>
<element id='1'>blah</element>
<element id='2'>blah</element>
<element id='3'>blah</element>
</root>
一个帕姆传入我的xsl,那就是..
<Ids>
<id>1</id>
<id>2</id>
<id>3</id>
</Ids>
在我的 xsl 中,我想遍历 parm 和 xml,以匹配任何具有等于 parm id 值之一的 id 属性的元素。这是动态的,我不会知道它们的值将是 uuid。
我已经试过了,但我找不到元素 id
<xsl:for-each select="/$Ids/id">
<xsl:variable name="driverId" select="."/>
<xsl:for-each select="/root/element[@id=$driverId]">
//do something
</xsl:for-each>
</xsl:for-each>
如果在第一个元素 id 之前发出消息,我可以看到所有值,但不能在循环中使用。.以我正在考虑的方式,这可能吗?
仍然无法正常工作,我已将
相同的结果。
在 xsl 中,如果我把每个都放在帕姆之外
<test><xsl:for-each select="/root/element/@id"></test>
我得到
<test>1 2 3</test>
如果放
<test><xsl:for-each select="/root/element/@id"></test>
里面
<xsl:for-each select="$Ids/id">
我什么也没得到???
定义键
<xsl:key name="id" match="element" use="@id"/>
然后,您还需要使用全局xsl:variable
引用主输入文档,即
<xsl:variable name="main-root" select="/"/>
一旦你有了那个用途
<xsl:for-each select="$Ids//id">
<xsl:for-each select="key('id', ., $main-root)">...</xsl:for-each>
</xsl:for-each>
没有您需要的钥匙
<xsl:for-each select="$Ids//id">
<xsl:for-each select="$main-root/root/element[@id = current()]">...</xsl:for-each>
</xsl:for-each>
<xsl:for-each select="/$Ids/id">
显然不正确:
/$Ids
在语法上不合法 - 变量/参数引用不能立即跟随/
运算符。
正确的表达方式是:
$Ids/id
而你真正想要的是:
/root/element[@id=$Ids/id]