1<?xml version="1.0" ?> 2<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 3<xsl:output method="xml" indent="yes"/> 4<xsl:template match="/"> 5<xsl:variable name="unique-countries" 6 select="/cities 7 /city[not(@country=preceding-sibling::city/@country)] 8 /@country" 9/> 10 <countries> 11 <xsl:for-each select="$unique-countries"> 12 <country name="{.}"> 13 <xsl:for-each select="//city[@country=current()]"> 14 <city><xsl:value-of select="@name"/></city> 15 </xsl:for-each> 16 </country> 17 </xsl:for-each> 18 </countries> 19</xsl:template> 20 21 <!-- 22 * Licensed to the Apache Software Foundation (ASF) under one 23 * or more contributor license agreements. See the NOTICE file 24 * distributed with this work for additional information 25 * regarding copyright ownership. The ASF licenses this file 26 * to you under the Apache License, Version 2.0 (the "License"); 27 * you may not use this file except in compliance with the License. 28 * You may obtain a copy of the License at 29 * 30 * http://www.apache.org/licenses/LICENSE-2.0 31 * 32 * Unless required by applicable law or agreed to in writing, software 33 * distributed under the License is distributed on an "AS IS" BASIS, 34 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 35 * See the License for the specific language governing permissions and 36 * limitations under the License. 37 --> 38 39</xsl:stylesheet> 40