2012-08-14 58 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>