我试图从CountryCode的位置获取CountryName的值。例如,在XML文件中,
<CountryCode>USA</CountryCode>
XSLT代码:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Party">
<xsl:copy-of select="node()|@*"/>
</xsl:template>
<xsl:template match="CountryCode">
<xsl:copy>
<xsl:variable name="CountryCode" select="upper-case(.)=('HK','USA','SG')"/> // list of country codes
<xsl:variable name="CountryName" as="element()*"> // list of countryname
<Name>HongKong</Name>
<Name>United States of America</Name>
<Name>Singapore</Name>
</xsl:variable>
<xsl:value-of select="$CountryName[($CountryCode)]"/> // get the position or index of the variable countryname to variable countrycode
</xsl:copy>
</xsl:template>
但是,我获得了CountryName的所有价值。像这样,
<CountryCode>Philippines United States of America Singapore</CountryCode>
而不是<CountryCode>United States of America</CountryCode>
我的代码中是否缺少某些内容?或者我是以错误的方式做到的?
提前致谢。
XSLT2.0
答案 0 :(得分:2)
如果您的国家/地区代码是ISO 3166代码,并且您可以使用XSLT 3.0处理器,那么您只需执行
<xsl:template match="CountryCode">
<xsl:copy>{json-doc('http://country.io/names.json')(.)}</xsl:copy>
</xsl:template>
如果你没有使用ISO 3166代码,或者你没有使用XSLT 3.0,那么也许你可以被说服改变......
答案 1 :(得分:0)
由于您使用的是XSLT 2.0,因此可以使用index-of
函数从CountryCode
变量中获取$CountryCode
的索引,然后使用索引的值来获取CountryName
1}}来自$CountryName
。
请尝试修改与<CountryCode>
匹配的模板,如下所示。
<xsl:template match="CountryCode">
<!-- Store input in a variable -->
<xsl:variable name="InputCode" select="." />
<xsl:copy>
<!-- Removed the upper-case function and retained the sequence -->
<xsl:variable name="CountryCode" select="('HK','USA','SG')"/>
<xsl:variable name="CountryName" as="element()*">
<Name>HongKong</Name>
<Name>United States of America</Name>
<Name>Singapore</Name>
</xsl:variable>
<!-- Added the index-of function to get the index of the input country
code from the sequence and then extract the country name from the
other sequence -->
<xsl:value-of select="$CountryName[index-of($CountryCode, upper-case($InputCode))]"/>
</xsl:copy>
</xsl:template>
输入
<CountryCode>USA</CountryCode>
上面的模板将输出为
<CountryCode>United States of America</CountryCode>