Xml XSLT合并来自相关节点的信息

Xml XSLT合并来自相关节点的信息,xml,xslt,Xml,Xslt,我正在寻找XSLT(1.0)样式表。 我有类似的输入: <?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

我正在寻找XSLT(1.0)样式表。 我有类似的输入:

<?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>
我正在尝试一些类似于嵌套for each循环的方法。但是当我在另一个节点内时,我不知道如何访问该节点


如果这是一个重复的问题,我很抱歉:问题可能是我真的不知道如何表达我的问题来找到类似的问题。

嵌套循环是不必要的。以下样式表:

<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>
注意:您提供的输入包含大量重要的空白,我在示例中删除了这些空白

<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