长字符串中的符号和实体会导致模板出现故障



我正在使用我在互联网上找到的一个模板将长字符串分割成块。它似乎能很好地处理大多数文本,但如果在这个所谓的长文本输入中有一个实体,比如"&amp它使得输出块太长。

这些数据的使用者需要某些实体中的长描述值,这些值被分解为固定长度的片段。所以这个数据很好:

<tag>
<text>This is a long string 1This is a long string 2This is a long string 3This is a long string 4</text>
</tag>

结果输出:

<?xml version="1.0" encoding="UTF-8"?>
<tag>
<text>
<text>This is a long string 1</text>
<text>This is a long string 2</text>
<text>This is a long string 3</text>
<text>This is a long string 4</text>
</text>
</tag>

第一个输出字符串中的数据太长

<tag>
<text>&amp;This is a long string 1This is a long string 2This is a long string 3This is a long string 4</text>
</tag>

结果输出:

<?xml version="1.0" encoding="UTF-8"?>
<tag>
<text>
<text>&amp;This is a long string </text>
<text>1This is a long string </text>
<text>2This is a long string </text>
<text>3This is a long string </text>
<text>4</text>
</text>
</tag>

我尝试将输出更改为html,但这并没有改变行为——无论如何,输出应该是xml。

事实上,我不确定这个问题是否真的可以解决,因为XML只是中间人,实际的源和目的地最终都是纯文本数据库字段,但我想将长字符串分为短字符串,精确到所需的长度。

这是模板。。这里需要的尺寸是:23

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:max="http://www.ibm.com/maximo" exclude-result-prefixes="max">
<xsl:output method="xml" encoding="utf-8" indent="yes"/>
<xsl:variable name="pChunkSize" select="23" />
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="text/text()" name="chunk">
<xsl:param name="pText" select="."/>
<xsl:if test="string-length($pText) >0">
<text>
<xsl:value-of select=
"substring($pText, 1, $pChunkSize)"/>
</text>
<xsl:call-template name="chunk">
<xsl:with-param name="pText"
select="substring($pText, $pChunkSize+1)"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

我看到了一些关于这方面的讨论,这可能很棘手——因为chopping&在中间(如果是在段的末尾(会导致无效的XML。

您已经正确地将文本划分为四个部分,每个部分的长度为23个字符,并在其正确的XML表示中正确地表示了这23个字符串中的每一个。

如果他们不能处理它,那一定是因为他们没有使用一致的XML解析器正确处理XML,所以问题出在他们的头上,而不是你的头上。

最新更新