如果 XSLT 中的字符超过 35 个,如何正确拆分字符串
How to split string properly if there are more than 35 characters in XSLT
我正在使用一些字符串在 Sage 中导入地址。
问题是,如果地址名称包含超过 35 个字符,我需要拆分我的地址名称,将第一部分放在一个变量中(最多 35 个字符),将另一部分放在另一个变量中。
但不是仅仅分成两半,或 35 / 14,它需要在最后一个 space 之前拆分,以保持地址名称的可读性。
例如:
34 Right Begun Street, City Of Splitting, 巴黎 法国
var 1 = 34 Right Begun Street, City Of
var 2 = 分裂,法国巴黎
(拆分包含第35个字符,因此需要在最后一部分)。
你知道如何用 XSLT/Xpath 1.0/Xpath 2.0 做到这一点吗?我已经尝试过 substring-before 和 substring-after,但我可以弄清楚如何在需要拆分时删除它。
非常感谢!
xsl:analyze-string
可以帮助:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="pattern" as="xs:string">^(.{1,35}) (.*$)</xsl:param>
<xsl:template match="data">
<xsl:copy>
<xsl:analyze-string select="." regex="{$pattern}">
<xsl:matching-substring>
<first-part>
<xsl:value-of select="regex-group(1)"/>
</first-part>
<second-part>
<xsl:value-of select="regex-group(2)"/>
</second-part>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:copy>
</xsl:template>
<xsl:output indent="yes"/>
</xsl:stylesheet>
我正在使用一些字符串在 Sage 中导入地址。 问题是,如果地址名称包含超过 35 个字符,我需要拆分我的地址名称,将第一部分放在一个变量中(最多 35 个字符),将另一部分放在另一个变量中。 但不是仅仅分成两半,或 35 / 14,它需要在最后一个 space 之前拆分,以保持地址名称的可读性。
例如: 34 Right Begun Street, City Of Splitting, 巴黎 法国
var 1 = 34 Right Begun Street, City Of
var 2 = 分裂,法国巴黎 (拆分包含第35个字符,因此需要在最后一部分)。
你知道如何用 XSLT/Xpath 1.0/Xpath 2.0 做到这一点吗?我已经尝试过 substring-before 和 substring-after,但我可以弄清楚如何在需要拆分时删除它。
非常感谢!
xsl:analyze-string
可以帮助:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="#all"
version="3.0">
<xsl:param name="pattern" as="xs:string">^(.{1,35}) (.*$)</xsl:param>
<xsl:template match="data">
<xsl:copy>
<xsl:analyze-string select="." regex="{$pattern}">
<xsl:matching-substring>
<first-part>
<xsl:value-of select="regex-group(1)"/>
</first-part>
<second-part>
<xsl:value-of select="regex-group(2)"/>
</second-part>
</xsl:matching-substring>
</xsl:analyze-string>
</xsl:copy>
</xsl:template>
<xsl:output indent="yes"/>
</xsl:stylesheet>