2013-03-31 89 views
0

下面是輸入。在Loop-1,2,3元素是無界的。如果我們在轉換中使用每個循環,我們將得到如A A,B B,C C那樣的輸出。但是我希望輸出與輸入一樣。XSLT邏輯每個

請看下面的輸出。

輸入:

<LOOP-1><!-- unbounded --> 
<element1>A</element1> 
<LOOP-1> 


<LOOP-2><!-- unbounded --> 
<element2>B</element2> 
<LOOP-2> 


<LOOP-3><!-- unbounded --> 
<element3>C</element3> 
<LOOP-3> 



<LOOP-1> 
<element1> A</element1> 
<LOOP-1> 


<LOOP-2> 
<element2>B</element2> 
<LOOP-2> 


<LOOP-3> 
<element3>C</element3> 
<LOOP-3> 

因爲我們會完成了把像

A 
A 
B 
B 
C 
C 

,但我想下面的output.how我們可以做到這一點,如果我們把上述各輸入。解決方案應該是generic.appreciate你的幫助。

輸出

<LOOP-1> 
<element1>A</element1> 
<LOOP-1> 


<LOOP-2> 
<element2>B</element2> 
<LOOP-2> 


<LOOP-3> 
<element3>C</element3> 
<LOOP-3> 



<LOOP-1> 
<element1> A</element1> 
<LOOP-1> 


<LOOP-2> 
<element2>B</element2> 
<LOOP-2> 


<LOOP-3> 
<element3>C</element3> 
<LOOP-3> 

XSLT:

<xsl:for-each select="LOOP-1"> 
    <xsl:element1> 
    <xsl:value-of select="element1"/> 
    </xsl:element1> 
</xsl:for-each> 

<xsl:for-each select="LOOP-2"> 
    <xsl:element2> 
    <xsl:value-of select="element2"/> 
    </xsl:element2> 
</xsl:for-each> 

<xsl:for-each select="LOOP-3"> 
    <xsl:element3> 
    <xsl:value-of select="element3"/> 
    </xsl:element3> 
</xsl:for-each> 
+0

你是什麼意思「如果我們把每個」。你的XSLT是什麼樣的?您所需的輸出看起來與您的輸入相同。如果是這樣的話,那你爲什麼要使用XSLT呢? – JLRishe

+0

我想問題是,對於輸入AABBCC,輸出ABCABC。我假設輸入ABBBCC,那麼輸出應該是ABCBCB。 – mikey

+0

MY xslt看起來像上面我已添加。我在oracles xslt轉換中使用此。 – sum

回答

0

<xsl:for-each>是沒有必要的,而且使事情變得更加複雜和困難在這種情況下。

如果您只是想產生源XML的精確副本在你的輸出,那麼你可以使用<xsl:copy-of>

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 

<xsl:template match="/"> 
    <xsl:copy-of select="."/> 
</xsl:template> 

</xsl:stylesheet> 

另一種選擇是使用identity transform

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output indent="yes"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

</xsl:stylesheet> 

身份轉換的優點是,如果/當您確實想要自定義輸出並轉換任何內容時,您可以簡單地添加一個tem板匹配該節點或屬性來處理該特殊情況。

舉例來說,如果你想產生不同的輸出爲第二B,你可以添加這個模板:

<xsl:template match="LOOP-2[2]/element2[.='B']"> 
    <xsl:copy> 
     <xsl:text>This is a special case for the second LOOP-2/element2 who's text() equals 'B'</xsl:text> 
     <xsl:apply-templates select="@*|node()"/> 
    </xsl:copy> 
</xsl:template>