您可以使用二进制日志递归(也许这就是您所说的分而治之的意思?无论如何,这个 XSLT 1.0 样式表......
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes"/>
<xsl:strip-space elements="*" />
<xsl:variable name="inputstringhex"
select="'005f6f7e8f914e717512346f7e8f914e7175'"/>
<xsl:template match="/">
<t>
<xsl:call-template name="string18s">
<xsl:with-param name="values" select="$inputstringhex" />
</xsl:call-template>
</t>
</xsl:template>
<xsl:template name="string18s">
<xsl:param name="values" />
<xsl:variable name="value-count" select="string-length($values) div 18" />
<xsl:choose>
<xsl:when test="$value-count = 0" />
<xsl:when test="$value-count >= 2">
<xsl:variable name="half-way" select="floor( $value-count div 2) * 18" />
<xsl:call-template name="string18s">
<xsl:with-param name="values" select="substring( $values, 1, $half-way)" />
</xsl:call-template>
<xsl:call-template name="string18s">
<xsl:with-param name="values" select="substring( $values,
$half-way+1, string-length($values) - $half-way)" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="process-one-string18">
<xsl:with-param name="value" select="$values" />
</xsl:call-template>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
<xsl:template name="process-one-string18">
<xsl:param name="value" />
<v>
<xsl:choose>
<xsl:when test="substring( $value, 13, 2) = '4e'">
<xsl:value-of select="concat( substring( $value, 1, 6),
'40404ef0f04040')" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="$value" />
</xsl:otherwise>
</xsl:choose>
</v>
</xsl:template>
</xsl:stylesheet>
...将产生此输出...
<t>
<v>005f6f40404ef0f04040</v>
<v>12346f40404ef0f04040</v>
</t>
根据需要调整或连接输出的值。输入是 $inputstringhex 变量内容。使用此解决方案只能在 13 级递归中处理 5000*18 长度的输入字符串。