我有一个复杂的地址字符串,或者说是不同的可能格式,我需要将其拆分为道路名称,门牌号码,楼层,位置(左,右,middel门)或门/房间号
我已经成功地完成了最后一点,伪“包含”:
<xsl:choose>
<xsl:when test="contains(@addressFarLeft, ANY_NUMERIC_VALUE_ANYWHERE)">
<door>NUMERICVALUE</door>
</xsl:when>
<xsl:otherwise></xsl:otherwise>
</xsl:choose>
我很确定我不能只使用某种形式的包含,但是呢?
值是动态设置的,但这里有几个可能的值:
<xsl:variable name="addressFarLeftValue">.th.</xsl:variable> =>
no numeric value, do nothing
<xsl:variable name="addressFarLeftValue">.1.</xsl:variable> =>
produce: <door>1</door>
<xsl:variable name="addressFarLeftValue">, . tv </xsl:variable> =>
no numeric value, do nothing
<xsl:variable name="addressFarLeftValue">,th, 4.</xsl:variable> =>
produce: <door>1</door>
有什么建议吗?
答案 0 :(得分:4)
如果你想测试字符串是否包含数值,一种方法可能是使用'translate'函数从字符串中删除所有数字,如果结果字符串与初始字符串不匹配,知道它必须包含一个数字。如果字符串没有改变,那么它就不会改变。
<xsl:choose>
<xsl:when test="translate($addressFarLeft, '1234567890', '') != $addressFarLeft">
<door>1</door>
</xsl:when>
<xsl:otherwise/>
因此,<xsl:variable name="addressFarLeftValue">.1.</xsl:variable>
输出<door>1</door>
,但<xsl:variable name="addressFarLeftValue">.th.</xsl:variable>
不会输出任何内容。
IF 你想提取实际数字,然后假设字符串中只有一个数字出现,你可以这样做......
<xsl:value-of
select="translate(
@addressFarLeft,
translate(@addressFarLeft, '1234567890', ''),
'')" />
因此,<xsl:variable name="addressFarLeftValue">,th, 42.</xsl:variable>
输出 42
如果您有多个号码,例如,th, 42, ab, 1
,这种方法会失败。
答案 1 :(得分:2)
可以使用“双翻译”方法获取所需的数值,首先由Michael Kay 显示:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text"/>
<xsl:variable name="addressFarLeftValue1" select="',th, 4.'"/>
<xsl:variable name="addressFarLeftValue2" select="', . tv'"/>
<xsl:variable name="vDoorNumber1" select=
"translate($addressFarLeftValue1,
translate($addressFarLeftValue1, '0123456789', ''),
'')"/>
<xsl:variable name="vDoorNumber2" select=
"translate($addressFarLeftValue2,
translate($addressFarLeftValue2, '0123456789', ''),
'')"/>
<xsl:template match="/">
"<xsl:value-of select="$vDoorNumber2"/>"
==========
"<xsl:value-of select="$vDoorNumber1"/>"
</xsl:template>
</xsl:stylesheet>
将此转换应用于任何XML文档(未使用)时,会生成所需的正确结果:
""
==========
"4"