2015-01-21 156 views
0

我試圖通過一組for-each來檢查一組節點,並且我希望在此節點中的參數驗證少數條件時選擇變量中的當前節點。 問題是它似乎選擇了節點中的值,而不是實際的節點本身。我希望能夠稍後將此變量用作節點集。XSL:選擇當前節點

XML($ PARAMETERFILE):

<?xml version="1.0" encoding="UTF-8"?> 
    <Cases> 
      <Case> 
       <Rule LineNumber="10" PartNumber="FT40X40"/> 
       <Template> 
        <Drawings> 
         test 
        </Drawings> 
       </Template> 
      </Case> 
      <Case> 
       <Rule LineNumber="10" PartNumber="FT40X46k"/> 
       <Template> 
        <Drawings> 
test2 
        </Drawings> 
       </Template> 
      </Case> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
exclude-result-prefixes="xs" 
version="2.0"> 
<xsl:variable name="GoodCase"> 
    <xsl:for-each select="$parameterFile/Cases/Case"> 
     <xsl:choose> 
       <xsl:when test="(Rule/@LineNumber = $markerNbLines) and 

(Rule/@PartNumber = $markerPartNumber)"> 
        <xsl:value-of select="current()"/> 
       </xsl:when> 
      </xsl:choose> 
     </xsl:for-each> 
    </xsl:variable> 

    <xsl:for-each select="$parameterFile/$GoodCase/Template/Drawings"> 
     test 
    </xsl:for-each> 

輸出預計:

test 

謝謝!

+1

請編輯您的問題:包括一個[**完整的XSLT樣式表,一個格式良好的輸入XML **](http://stackoverflow.com/help/mcve),以及您期望的輸出 - 也是XML或文本 - 不作爲描述。 – 2015-01-21 10:51:47

+0

爲什麼您的問題標記爲XSLT 1.0而您的樣式表聲明版本2.0? – 2015-01-21 11:32:36

回答

0

該pb [的問題?]是它似乎選擇節點中的值,而不是實際節點本身。

那麼,你使用:

<xsl:value-of select="current()"/> 

所以這只是預期。您可以使用<xsl:copy-of>來編寫整個節點。然而,由此產生的變量將舉行結果樹片段,不是節點集,所以如果:

而且我希望能夠使用這個變量作爲節點集以後。

你會好得多填充你的變量以這種方式(未經測試,因爲沒有測試是可能的部分代碼):

<xsl:variable name="GoodCase" select="$parameterFile/Cases/Case[Rule/@LineNumber=$markerNbLines and Rule/@PartNumber=$markerPartNumber]"/> 

這僅存儲到原來的節點的引用,因此是一個節點本身。