我有以下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以匹配id属性等于parm id值之一的任何元素。这是动态的,我不知道它们将是uuids的值。< / p>
我已经尝试了这个但是找不到元素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中如果我把parm放在每个
之外 <test><xsl:for-each select="/root/element/@id"></test>
我得到了
<test>1 2 3</test>
IF put
<test><xsl:for-each select="/root/element/@id"></test>
里面
<xsl:for-each select="$Ids/id">
我没有得到任何回报???
答案 0 :(得分:1)
定义一个键
<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>
答案 1 :(得分:0)
<xsl:for-each select="/$Ids/id">
显然不正确:
/$Ids
在语法上不合法 - 变量/参数引用无法立即跟随/
运算符。
正确的表达式:
$Ids/id
你真正想要的是:
/root/element[@id=$Ids/id]