XSLT:复制元素文本,它本身就是一个xml文档,而不使用的值



我正在复制我需要的一个元素(它是一个嵌入的xml文档(的文本内容,并根据文本创建新文档,如下所示,用于我无法控制的文件格式。问题是,偶尔我会在这个元素中传递大的(3MB+(文本值(xml文件(,解析器崩溃(java堆空间(-我认为是因为的值不能将文本作为字符串处理。理想情况下,我只想复制或进行某种身份转换,以剥离其他元素,或者在不将其缓冲到字符串中的情况下进行复制。我认为这就是问题所在,有办法吗?(不添加更多内存(。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="text" omit-xml-declaration="yes" />

<xsl:template match="/">
<xsl:value-of select="root/toplevel/row/payload" />
</xsl:template>
</xsl:stylesheet>
<?xml version='1.0' ?>
<root>
<toplevel>
<row>
<payload> 
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;documentProperties type="documentProperties">
&lt;producedBy>
&lt;ourName type="string">NAMEHERE&lt;/ourName>
&lt;user>Someone&lt;/user>
&lt;/producedBy>
&lt;/documentProperties>
</payload>
<System>NotWanted</System>
</row>
</toplevel>NotWantedEither
</root>

请注意,末尾的同级元素和父元素中的文本是不需要的,有时我尝试过的几次复制都会包含这些文本。我只想要有效载荷里的东西。此代码适用于此示例,但当文本超过某个大小限制时则不适用。

输出:

<?xml version="1.0" encoding="UTF-8"?>
<documentProperties type="documentProperties">
<producedBy>
<ourName type="string">NAMEHERE</ourName>
......
<.... in practice +3 MB more content in output and source element text here...>
.......
<user>Someone</user>
</producedBy>
</documentProperties>

没有找到所需的XSLT解决方案,需要相当快的工作流程。增加更多的内存解决了这个问题。将堆空间Xmx增加到10G,作为偶尔发生这种情况的解决方法。

最新更新