这是一个示例xml,我必须分成多个文件。 我曾尝试使用结果文档和组的多种方式,但在所有示例中,split都是平均分配的。
<?xml version="1.0" encoding="UTF-8"?>
<Sample>
<A>
<para>A A A A A A A</para>
</A>
<B>
<para>B B B B B B B</para>
<child1level1>
<para>first child first level</para>
<child1level2>
<para>second level child</para>
</child1level2>
</child1level1>
<child2level1>
<para>second child first level</para>
</child2level1>
</B>
<C>
<para>C C C C C C C</para>
</C>
<D>
<para>D D D D D D D</para>
</D>
<G>
<para>GGGGGGGGGGGGGGGG</para>
<child1level1>
<para>first child first level</para>
<child1level2>
<para>second level child</para>
</child1level2>
</child1level1>
<child2level1>
<para>second child first level</para>
</child2level1>
</G>
<E>
<para>E E E E E E E E E</para>
</E>
<F>
<child1level1>
<para>first child first level</para>
<child1level2>
<para>second level child</para>
</child1level2>
</child1level1>
<child2level1>
<para>second child first level</para>
</child2level1>
<para>F F F F F F F F F</para>
</F>
<G>
<para>GGGGGGGGGGGGGGGG</para>
</G>
<H>
<para>H H H H H H H</para>
</H>
<I>
<para>I I I I I I I</para>
</I>
<H>
<para>H H H H H H H</para>
</H>
</Sample>
我必须根据组拆分主XML:
*在此XML G&amp; H出现了2次,因此我不得不将它们视为不同的群体。
Output1.xml
<?xml version="1.0" encoding="UTF-8"?>
<split>
<A>
<para>A A A A A A A</para>
</A>
<B>
<para>B B B B B B B</para>
<child1level1>
<para>first child first level</para>
<child1level2>
<para>second level child</para>
</child1level2>
</child1level1>
<child2level1>
<para>second child first level</para>
</child2level1>
</B>
<C>
<para>C C C C C C C</para>
</C>
<D>
<para>D D D D D D D</para>
</D>
</split>
Output2.xml
<?xml version="1.0" encoding="UTF-8"?>
<split>
<G>
<para>GGGGGGGGGGGGGGGG</para>
<child1level1>
<para>first child first level</para>
<child1level2>
<para>second level child</para>
</child1level2>
</child1level1>
<child2level1>
<para>second child first level</para>
</child2level1>
</G>
</split>
Output3.xml
<?xml version="1.0" encoding="UTF-8"?>
<split>
<G>
<para>
GGGGGGGGGGGGGGGG
</para>
</G>
</split>
这些只是3个输出文件。其他是这样的。输出文件也应该有一个root标签,我使用split标签作为根标签。
答案 0 :(得分:0)
解决这个问题的一种方法可能是使用group-starting-with="*[local-name() = $start-group-with]"
,其中参数被定义为一组元素名称<xsl:param name="start-group-with" as="xs:string+" select="'A', 'E', 'G', 'H', 'I'"/>
来启动一个组:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
version="2.0">
<xsl:param name="start-group-with" as="xs:string+" select="'A', 'E', 'G', 'H', 'I'"/>
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="/*">
<xsl:for-each-group select="*" group-starting-with="*[local-name() = $start-group-with]">
<xsl:result-document href="split-group-{position()}-key-{local-name()}.xml">
<Split>
<xsl:copy-of select="current-group()"/>
</Split>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
当然,在“E”,“G”,“H”,“I”之前跟随任何元素的A
元素组合,但是您没有准确地描述什么是标准,您将相邻的A
,B
,C
,D
元素组合在一起的示例输入,E
和F
,以及将每个G
,H
和I
放入其自己的群组/文件中。