2012-08-14 64 views
0

我試圖使用XSLT1.0分裂從XML的價值我有一個像問題在XSLT用逗號劈裂的價值1.0

<employees> 
    <examples> 
     <example id="1,2,3"> 
     </example> 
    </examples> 

    <emp id="1"> 
    <name>john</name> 
    </emp> 
    <emp id="2"> 
    <name>raj</name> 
    </emp> 
    <emp id="3"> 
    <name>sat</name> 
    </emp> 

</employees> 

一個XML我需要從示例代碼和分裂提取ID它,並從emp標籤值說,輸出應爲

<employees> 
    <employee> 
     <id>1</id> 
     <name>john</name> 
    </employee> 
    <employee> 
     <id>2</id> 
     <name>raj</name> 
    </employee> 
    <employee> 
     <id>3</id> 
     <name>sat</name> 
    </employee> 

</employees> 
+0

示例ID包含「4」,但未在輸出中顯示。這是一種類型嗎? – 2012-08-14 10:12:48

+0

@TimC Updated.Please看看。 – Ramesh 2012-08-14 10:15:43

回答

0

我覺得比,而不是試圖將例如元素,這是XSLT1-0有點亂上分裂@id屬性,你可以嘗試匹配個EMP元件,其@id顯示在屬性

<xsl:variable name="ids" select="concat(',', examples/example/@id, ',')"/> 
<xsl:apply-templates select="emp[contains($ids, concat(',', @id, ','))]"/> 

注意使用逗號的@id確保1的@id並不受11

這裏的示例@id拾取是完整的XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes"/> 

    <xsl:template match="employees"> 
     <employees> 
     <xsl:variable name="ids" select="concat(',', examples/example/@id, ',')"/> 
     <xsl:apply-templates select="emp[contains($ids, concat(',', @id, ','))]"/> 
     </employees> 
    </xsl:template> 

    <xsl:template match="emp"> 
     <employee> 
     <id> 
      <xsl:value-of select="@id"/> 
     </id> 
     <xsl:apply-templates select="node()"/> 
     </employee> 
    </xsl:template> 

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

當適用於您的示例XML,下面是輸出

<employees> 
    <employee> 
     <id>1</id> 
     <name>john</name> 
    </employee> 
    <employee> 
     <id>2</id> 
     <name>raj</name> 
    </employee> 
    <employee> 
     <id>3</id> 
     <name>sat</name> 
    </employee> 
</employees>