2011-11-16 68 views
0

我正在尋找一個XSLT(1.0)樣式表。 我有類似這樣的輸入:XSLT合併來自相關節點的信息

<?xml version="1.0" encoding="ISO-8859-1"?> 

<city country="USA"> 
Washington 
</city> 

<city country="USA"> 
New York 
</city> 

<city country="Germany"> 
Berlin 
</city> 

<country size="big"> 
USA 
</country> 


<country size="small"> 
Germany 
</country> 

我想輸出是這樣的:

Country USA 
Size: big 
Cities: 
Washington 
New York 

Country Germany 
Size: small 
Cities: 
Berlin 

我想是這樣的嵌套for-each循環。但是當我在另一個節點內部時,我不知道如何訪問節點。

如果這是一個重複的問題,我很抱歉:問題可能是我真的不知道如何表達我的問題以找到類似的問題。

回答

2

嵌套循環沒有必要。下面的樣式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
    <xsl:output method="text"/> 
    <xsl:strip-space elements="*"/> 
    <xsl:template match="/"> 
     <xsl:apply-templates select="/*/country"/> 
    </xsl:template> 
    <xsl:template match="country"> 
     <xsl:text>Country </xsl:text> 
     <xsl:value-of select="."/> 
     <xsl:text>&#xa;Size: </xsl:text> 
     <xsl:value-of select="@size"/> 
     <xsl:text>&#xa;Cities:&#xa;</xsl:text> 
     <xsl:apply-templates select="../city[@country=current()/text()]"/> 
     <xsl:text>&#xa;</xsl:text> 
    </xsl:template> 
    <xsl:template match="city"> 
     <xsl:apply-templates/> 
     <xsl:text>&#xa;</xsl:text> 
    </xsl:template> 
</xsl:stylesheet> 

應用於此輸入:

<root> 
    <city country="USA">Washington</city> 
    <city country="USA">New York</city> 
    <city country="Germany">Berlin</city> 
    <country size="big">USA</country> 
    <country size="small">Germany</country> 
</root> 

產地:

Country USA 
Size: big 
Cities: 
Washington 
New York 

Country Germany 
Size: small 
Cities: 
Berlin 

注:您所提供的輸入包括很多顯著的空白,這是我刪除在我的例子中。