0

我有以下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>

如果在第一个 for each 之前将元素 id 的值发送出去,我可以看到所有值,但在循环中看不到。这是否可能以我正在考虑的方式进行。

仍然无法正常工作,我已将其更改为
相同的结果。

在 xsl 中,如果我将 for-each 放在 parm 之外

  <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">

我什么都没退回???

4

2 回答 2

1

定义一个键

<xsl:key name="id" match="element" use="@id"/>

xsl:variable那么您还需要使用全局ie来引用主输入文档

<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>
于 2012-11-28T15:11:46.150 回答
0
<xsl:for-each  select="/$Ids/id">

显然不正确

/$Ids在语法上不合法——变量/参数引用不能立即跟随/运算符。

正确的表达方式是

$Ids/id

而你真正想要的是

/root/element[@id=$Ids/id]
于 2012-11-28T14:00:50.667 回答