xml中的每一个都在为每个parm内部转换

时间:2012-11-28 13:44:09

标签: xml xslt xml-parsing xslt-1.0 xslt-2.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以匹配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">

我没有得到任何回报???

2 个答案:

答案 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]