2013-07-10 78 views
0

考慮下面的XML:XSLT選擇不同的數值元素

<Images> 
<Extra1>a</Extra1> 
<Extra2>b</Extra2> 
<Img1>img1</Img1> 
<Img2>img2</Img2> 
<Img3>img2</Img3> 
<Img4>img1</Img4> 
</Images> 

我想不同的值的集合元素Img1, Img2, Img3, Img4使輸出節點集具有價值img1img2。我早些時候使用過xsl:key,但那需要所有元素名稱相同。我怎樣才能達到不同的元素名稱?

回答

1

你可以這樣做:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="xml" indent="yes" omit-xml-declaration="yes"/> 
    <xsl:key name="kImageValue" match="Images/*[starts-with(local-name(), 'Img')]" 
      use="."/> 

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

    <xsl:template match="Images"> 
    <xsl:copy> 
     <xsl:apply-templates select="*[generate-id() = generate-id(key('kImageValue', .)[1])]" /> 
    </xsl:copy> 
    </xsl:template> 

    <xsl:template match="Images/*"> 
    <Value> 
     <xsl:value-of select="."/> 
    </Value> 
    </xsl:template> 
</xsl:stylesheet> 

當你的樣品輸入運行,其結果是:

<Images> 
    <Value>img1</Value> 
    <Value>img2</Value> 
</Images>