在XSLT中创建一个列表/数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在XSLT中创建一个列表/数组相关的知识,希望对你有一定的参考价值。
我有以下场景。我有一份国家名单(EG,KSA,UAE,AG)
如果XML输入包含在此列表中,我需要检查它:
<xsl:variable name="$country" select="Request/country" >
<!-- now I need to declare the list of countries here -->
<xsl:choose>
<!-- need to check if this list contains the country -->
<xsl:when test="$country='??????'">
<xsl:text>IN</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>OUT</xsl:text>
</xsl:otherwise>
</xsl:choose>
注意:我使用的是XSLT 1.0。
答案
编辑
再次阅读你的帖子,我认为我的答案的原始版本(下面)不是它。
你已经有了一个列表 - 你的变量声明选择了所有<country>
节点的节点集,这些节点是<Request>
的子节点(节点集是数组/列表的XSLT等价物):
<xsl:variable name="$country" select="Request/country" >
但关键是,你甚至不需要将该列表作为单独的变量;所有你需要的是:
<xsl:when test="Request[country=$country]"><!-- … --></xsl:when>
在Request[country=$country]
读作“在<Request>
内,看看每个<country>
并选择它,如果它等于$country
。”当表达式返回非空节点集时,$country
位于列表中。
事实上,这就是鲁本斯法里亚斯从一开始就说的话。 :)
原始答案,保留备案。
如果用“list”表示逗号分隔的标记字符串:
<!-- instead of a variable, this could be a param or dynamically calculated -->
<xsl:variable name="countries" select="'EG, KSA, UAE, AG'" />
<xsl:variable name="country" select="'KSA'" />
<xsl:choose>
<!-- concat the separator to start and end to ensure unambiguous matching -->
<xsl:when test="
contains(
concat(', ', normalize-space($countries), ', ')
concat(', ', $country, ', ')
)
">
<xsl:text>IN</xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text>OUT</xsl:text>
</xsl:otherwise>
</xsl:choose>
另一答案
<xsl:variable name="$country" select="Request/country"/>
<xsl:variable name="countries">|EG|KSA|UAE|AG|</xsl:variable>
<xsl:when test="contains($countries,$country)">...</xsl:when>
另一答案
如果您的国家/地区列表属于XML输入,请尝试类似的操作:
<xsl:when test="/yourlist[country = $country]'">
或者,如果这是静态的,你可以选择:
<xsl:when test="$country = 'EG' or $country = 'KSA' or ...">
以上是关于在XSLT中创建一个列表/数组的主要内容,如果未能解决你的问题,请参考以下文章
如何膨胀由 Android Studio 向导在 Activity 中创建的片段(列表)?