如果 XSLT 中的字符超过 35 个,如何正确分割字符串

Rob*_*n.D 1 xslt xpath saxon

我正在使用一些字符串来导入 Sage 中的地址。问题是,如果地址名称包含超过 35 个字符,我需要拆分地址名称,将第一部分放入变量中(最多 35 个字符),将另一部分放入另一个变量中。但不是简单地分割成两半,即 35 / 14,而是需要在最后一个空格之前分割,以保持地址名称的可读性。

例如: 34 Right Begun Street, City Of Splitting, 法国巴黎

var 1 = 34 右开始街,城市

var 2 = Splitting, 法国巴黎(splitting 包含第 35 个字符,因此它需要位于最后一部分)。

您知道如何使用 XSLT/Xpath 1.0/Xpath 2.0 执行此操作吗?我尝试过 substring-before 和 substring-after,但我可以弄清楚如何在需要拆分时删除它。

非常感谢 !

Mar*_*nen 5

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>
Run Code Online (Sandbox Code Playgroud)

https://xsltfiddle.liberty-development.net/ei5R4u2