2012-11-28 18 views
0

的,我有以下XMLXSL每個上的XML被轉換內部每個PARM

<root> 
     <element id='1'>blah</element> 
     <element id='2'>blah</element> 
     <element id='3'>blah</element> 
    </root> 

傳遞到我的XSL是一個PARM ..

<Ids> 
     <id>1</id> 
     <id>2</id> 
     <id>3</id> 
    </Ids> 

在我的XSL我要循環訪問parm和xml以匹配id屬性等於parm id值之一的任何元素。這是動態的,我不知道它們的值是否是uuids。

我已經試過這一點,但我的元素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> 

IF把

<test><xsl:for-each select="/root/element/@id"></test> 

<xsl:for-each select="$Ids/id"> 
的PARM外

我什麼都沒有返回?

回答

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> 
+0

我試過了「without」版本。 ..仍然是同樣的問題,我會嘗試現在的鑰匙 –

+0

謝謝,馬丁設置變量和關鍵工作!我能夠使用我的「內部」變量driverId來保存id的實例,以便在每個子字符串中使用第二個id。 –

0
<xsl:for-each select="/$Ids/id"> 

顯然不正確

/$Ids在語法上不合法的 - 一個變量/參數引用不能immeditely按照/操作。

正確的表達是

$Ids/id 

你真正想要的是

/root/element[@id=$Ids/id] 
+0

我能夠得到的$值這樣的ID我都沒有嘗試過的「 /「。我從java發送parm作爲document.getDocumentElement() –

+0

@JustinCox,好的,然後從我的答案中的表達式中刪除'/ Ids' - 我也會更新它。 –

+0

@JustinCox,我更新了答案。 –