我有 2 个示例 xml 文件
<?xml version="1.0" encoding="UTF-8"?>
<foobar>
<foo>ONE</foo>
<bar>a</bar>
</foobar>
<?xml version="1.0" encoding="UTF-8"?>
<foobar>
<foo>ONE</foo>
<foo>two</foo>
<bar>a</bar>
</foobar>
第一个 xml 的所需输出与输入相同。第二个xml示例是
<foobar>
<s>
<s>
<foo>ONE</foo>
<foo>two<foo>
</s>
<s>
<bar>a</bar>
</s>
</s>
</foobar>
我有一个 xslt 文件,它将元素序列放在“s”标签中,否则输出相同的 xml 文件。
我的 xslt 是-
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output indent="yes"/>
<xsl:key name="kGroupLeader" match="*"
use="generate-id(self::*[name() != name(preceding-sibling::*[1])])" />
<xsl:key name ="checkgroup" match="*" use ="self::*[name() = name(preceding-sibling::*[1])]" />
<xsl:template match="*[*]">
<xsl:copy>
<xsl:choose>
<xsl:when test="(key('checkgroup',*))">
<s>
<xsl:for-each select="*[key('kGroupLeader', generate-id())]">
<s>
<xsl:apply-templates select=". | following-sibling::*[
name() = name(current())
and generate-id(current()) = generate-id(
preceding-sibling::*[key('kGroupLeader', generate-id())][1]
)
]" />
</s>
</xsl:for-each>
</s>
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
它工作正常。但它使用大量内存并且需要大量时间来处理大型 xml 文件。如何提高性能以使我的 xslt 更快?