在xslt 2.0中你可以做到这一点的一种方法是将你的国家名称分解为代码映射到变量,用它来创建一个返回给定国家名称的代码的函数,然后在group-by子句中使用该函数xsl:for-each-group,按代码分组 - 因为它们是分组键 - 按定义是唯一的:
<xsl:stylesheet version=”2.0”
xmlns:xsl=”http://www.w3.org/1999/XSL/Transform“
xmlns:xs=”http://www.w3.org/2001/XMLSchema“
xmlns:set="http://exslt.org/sets"
xmlns:w="whatever"
exclude-result-prefixes="xsl xs set w">
<xsl:output method="xml"
omit-xml-declaration="yes"
indent="yes"/>
<xsl:variable name="countryCodes">
<country name="Afghanistan" code="AF"/>
<country name="?land Islands" code="AX"/>
<country name="Albania" code="AL"/>
<country name="Algeria" code="DZ"/>
<country name="American Samoa" code="AS"/>
<country name="Andorra" code="AD"/>
<country name="Angola" code="AO"/>
<country name="Anguilla" code="AI"/>
<country name="Antarctica" code="AQ"/>
<country name="Antigua and Barbuda" code="AG"/>
<country name="Argentina" code="AR"/>
<country name="Armenia" code="AM"/>
<country name="Aruba" code="AW"/>
<country name="Australia" code="AU"/>
<country name="Austria" code="AT"/>
<country name="Azerbaijan" code="AZ"/>
<country name="Bahamas" code="BS"/>
<country name="Bahrain" code="BH"/>
<country name="Bangladesh" code="BD"/>
<country name="Barbados" code="BB"/>
<country name="Belarus" code="BY"/>
<country name="Belgium" code="BE"/>
<country name="Belize" code="BZ"/>
<country name="Benin" code="BJ"/>
<country name="Bermuda" code="BM"/>
<country name="Bhutan" code="BT"/>
<country name="Bolivia, Plurinational State of" code="BO"/>
<country name="Bonaire, Sint Eustatius and Saba" code="BQ"/>
<country name="Bosnia and Herzegovina" code="BA"/>
<country name="Botswana" code="BW"/>
<country name="Bouvet Island" code="BV"/>
<country name="Brazil" code="BR"/>
<country name="British Indian Ocean Territory" code="IO"/>
<country name="Brunei Darussalam" code="BN"/>
<country name="Bulgaria" code="BG"/>
<country name="Burkina Faso" code="BF"/>
<country name="Burundi" code="BI"/>
<country name="Cambodia" code="KH"/>
<country name="Cameroon" code="CM"/>
<country name="Canada" code="CA"/>
<country name="Cape Verde" code="CV"/>
<country name="Cayman Islands" code="KY"/>
<country name="Central African Republic" code="CF"/>
<country name="Chad" code="TD"/>
<country name="Chile" code="CL"/>
<country name="China" code="CN"/>
<country name="Christmas Island" code="CX"/>
<country name="Cocos (Keeling) Islands" code="CC"/>
<country name="Colombia" code="CO"/>
<country name="Comoros" code="KM"/>
<country name="Congo" code="CG"/>
<country name="Congo, the Democratic Republic of the" code="CD"/>
<country name="Cook Islands" code="CK"/>
<country name="Costa Rica" code="CR"/>
<country name="C?te d Ivoire" code="CI"/>
<country name="Croatia" code="HR"/>
<country name="Cuba" code="CU"/>
<country name="Cura?ao" code="CW"/>
<country name="Cyprus" code="CY"/>
<country name="Czech Republic" code="CZ"/>
<country name="Denmark" code="DK"/>
<country name="Djibouti" code="DJ"/>
<country name="Dominica" code="DM"/>
<country name="Dominican Republic" code="DO"/>
<country name="Ecuador" code="EC"/>
<country name="Egypt" code="EG"/>
<country name="El Salvador" code="SV"/>
<country name="Equatorial Guinea" code="GQ"/>
<country name="Eritrea" code="ER"/>
<country name="Estonia" code="EE"/>
<country name="Ethiopia" code="ET"/>
<country name="Falkland Islands (Malvinas)" code="FK"/>
<country name="Faroe Islands" code="FO"/>
<country name="Fiji" code="FJ"/>
<country name="Finland" code="FI"/>
<country name="France" code="FR"/>
<country name="French Guiana" code="GF"/>
<country name="French Polynesia" code="PF"/>
<country name="French Southern Territories" code="TF"/>
<country name="Gabon" code="GA"/>
<country name="Gambia" code="GM"/>
<country name="Georgia" code="GE"/>
<country name="Germany" code="DE"/>
<country name="Ghana" code="GH"/>
<country name="Gibraltar" code="GI"/>
<country name="Greece" code="GR"/>
<country name="Greenland" code="GL"/>
<country name="Grenada" code="GD"/>
<country name="Guadeloupe" code="GP"/>
<country name="Guam" code="GU"/>
<country name="Guatemala" code="GT"/>
<country name="Guernsey" code="GG"/>
<country name="Guinea" code="GN"/>
<country name="Guinea-Bissau" code="GW"/>
<country name="Guyana" code="GY"/>
<country name="Haiti" code="HT"/>
<country name="Heard Island and McDonald Islands" code="HM"/>
<country name="Holy See (Vatican City State)" code="VA"/>
<country name="Honduras" code="HN"/>
<country name="Hong Kong" code="HK"/>
<country name="Hungary" code="HU"/>
<country name="Iceland" code="IS"/>
<country name="India" code="IN"/>
<country name="Indonesia" code="ID"/>
<country name="Iran, Islamic Republic of" code="IR"/>
<country name="Iran" code="IR"/>
<country name="Iraq" code="IQ"/>
<country name="Ireland" code="IE"/>
<country name="Isle of Man" code="IM"/>
<country name="Israel" code="IL"/>
<country name="Italy" code="IT"/>
<country name="Jamaica" code="JM"/>
<country name="Japan" code="JP"/>
<country name="Jersey" code="JE"/>
<country name="Jordan" code="JO"/>
<country name="Kazakhstan" code="KZ"/>
<country name="Kenya" code="KE"/>
<country name="Kiribati" code="KI"/>
<country name="Korea, Democratic Peoples Republic of" code="KP"/>
<country name="Korea, Republic of" code="KR"/>
<country name="Kuwait" code="KW"/>
<country name="Kyrgyzstan" code="KG"/>
<country name="Lao Peoples Democratic Republic" code="LA"/>
<country name="Latvia" code="LV"/>
<country name="Lebanon" code="LB"/>
<country name="Lesotho" code="LS"/>
<country name="Liberia" code="LR"/>
<country name="Libya" code="LY"/>
<country name="Liechtenstein" code="LI"/>
<country name="Lithuania" code="LT"/>
<country name="Luxembourg" code="LU"/>
<country name="Macao" code="MO"/>
<country name="Macedonia, the Former Yugoslav Republic of" code="MK"/>
<country name="Madagascar" code="MG"/>
<country name="Malawi" code="MW"/>
<country name="Malaysia" code="MY"/>
<country name="Maldives" code="MV"/>
<country name="Mali" code="ML"/>
<country name="Malta" code="MT"/>
<country name="Marshall Islands" code="MH"/>
<country name="Martinique" code="MQ"/>
<country name="Mauritania" code="MR"/>
<country name="Mauritius" code="MU"/>
<country name="Mayotte" code="YT"/>
<country name="Mexico" code="MX"/>
<country name="Micronesia, Federated States of" code="FM"/>
<country name="Moldova, Republic of" code="MD"/>
<country name="Monaco" code="MC"/>
<country name="Mongolia" code="MN"/>
<country name="Montenegro" code="ME"/>
<country name="Montserrat" code="MS"/>
<country name="Morocco" code="MA"/>
<country name="Mozambique" code="MZ"/>
<country name="Myanmar" code="MM"/>
<country name="Namibia" code="NA"/>
<country name="Nauru" code="NR"/>
<country name="Nepal" code="NP"/>
<country name="Netherlands" code="NL"/>
<country name="New Caledonia" code="NC"/>
<country name="New Zealand" code="NZ"/>
<country name="Nicaragua" code="NI"/>
<country name="Niger" code="NE"/>
<country name="Nigeria" code="NG"/>
<country name="Niue" code="NU"/>
<country name="Norfolk Island" code="NF"/>
<country name="Northern Mariana Islands" code="MP"/>
<country name="Norway" code="NO"/>
<country name="Oman" code="OM"/>
<country name="Pakistan" code="PK"/>
<country name="Palau" code="PW"/>
<country name="Palestine, State of" code="PS"/>
<country name="Palestinian" code="PS"/>
<country name="Panama" code="PA"/>
<country name="Papua New Guinea" code="PG"/>
<country name="Paraguay" code="PY"/>
<country name="Peru" code="PE"/>
<country name="Philippines" code="PH"/>
<country name="Pitcairn" code="PN"/>
<country name="Poland" code="PL"/>
<country name="Portugal" code="PT"/>
<country name="Puerto Rico" code="PR"/>
<country name="Qatar" code="QA"/>
<country name="R��union" code="RE"/>
<country name="Romania" code="RO"/>
<country name="Russia" code="RU"/>
<country name="Rwanda" code="RW"/>
<country name="Saint Barth��lemy" code="BL"/>
<country name="Saint Helena, Ascension and Tristan da Cunha" code="SH"/>
<country name="Saint Kitts and Nevis" code="KN"/>
<country name="Saint Lucia" code="LC"/>
<country name="Saint Martin (French part)" code="MF"/>
<country name="Saint Pierre and Miquelon" code="PM"/>
<country name="Saint Vincent and the Grenadines" code="VC"/>
<country name="Samoa" code="WS"/>
<country name="San Marino" code="SM"/>
<country name="Sao Tome and Principe" code="ST"/>
<country name="Saudi Arabia" code="SA"/>
<country name="Senegal" code="SN"/>
<country name="Serbia" code="RS"/>
<country name="Seychelles" code="SC"/>
<country name="Sierra Leone" code="SL"/>
<country name="Singapore" code="SG"/>
<country name="Sint Maarten (Dutch part)" code="SX"/>
<country name="Slovakia" code="SK"/>
<country name="Slovenia" code="SI"/>
<country name="Solomon Islands" code="SB"/>
<country name="Somalia" code="SO"/>
<country name="South Africa" code="ZA"/>
<country name="South Georgia and the South Sandwich Islands" code="GS"/>
<country name="South Sudan" code="SS"/>
<country name="Spain" code="ES"/>
<country name="Sri Lanka" code="LK"/>
<country name="Sudan" code="SD"/>
<country name="Suriname" code="SR"/>
<country name="Svalbard and Jan Mayen" code="SJ"/>
<country name="Swaziland" code="SZ"/>
<country name="Sweden" code="SE"/>
<country name="Switzerland" code="CH"/>
<country name="Syrian Arab Republic" code="SY"/>
<country name="Taiwan, Province of China" code="TW"/>
<country name="Tajikistan" code="TJ"/>
<country name="Tanzania, United Republic of" code="TZ"/>
<country name="Thailand" code="TH"/>
<country name="Timor-Leste" code="TL"/>
<country name="Togo" code="TG"/>
<country name="Tokelau" code="TK"/>
<country name="Tonga" code="TO"/>
<country name="Trinidad and Tobago" code="TT"/>
<country name="Tunisia" code="TN"/>
<country name="Turkey" code="TR"/>
<country name="Turkmenistan" code="TM"/>
<country name="Turks and Caicos Islands" code="TC"/>
<country name="Tuvalu" code="TV"/>
<country name="Uganda" code="UG"/>
<country name="Ukraine" code="UA"/>
<country name="United Arab Emirates" code="AE"/>
<country name="United Kingdom" code="GB"/>
<country name="United States" code="US"/>
<country name="United States Minor Outlying Islands" code="UM"/>
<country name="Uruguay" code="UY"/>
<country name="Uzbekistan" code="UZ"/>
<country name="Vanuatu" code="VU"/>
<country name="Venezuela. Bolivarian Republic of" code="VE"/>
<country name="Viet Nam" code="VN"/>
<country name="Virgin Islands, British" code="VG"/>
<country name="Virgin Islands, U.S." code="VI"/>
<country name="Wallis and Futuna" code="WF"/>
<country name="Western Sahara" code="EH"/>
<country name="Yemen" code="YE"/>
<country name="Zambia" code="ZM"/>
<country name="Zimbabwe" code="ZW"/>
</xsl:variable>
<xsl:function name="w:country-code">
<xsl:param name="name"/>
<xsl:variable name="countryCode" select="$countryCodes/*[@name = $name][1]/@code"/>
<xsl:value-of select="if ($countryCode) then $countryCode else 'CU'"/>
</xsl:function>
<xsl:template match="/">
<xsl:for-each-group select="addressList/address" group-by="w:country-code(country)">
<Country>
<CountryCode>
<xsl:value-of select="current-grouping-key()"/>
</CountryCode>
<CountryTypeCode>COUNTRY_OF_REGISTRATION</CountryTypeCode>
</Country>
</xsl:for-each-group>
</xsl:template>
</code>