Xml文件带有始终存在的某些元素。这是一个例子。XSLT:如果元素文本不同于上一个,则按记录数和拆分文件拆分xml文件
<xml>
<record>
<PieFlavor>Pie</PieFlavor>
</record>
<record>
<PieFlavor>Cherry</PieFlavor>
</record>
<record>
<PieFlavor>Cherry</PieFlavor>
</record>
<record>
<PieFlavor>Orange</PieFlavor>
</record>
<record>
<PieFlavor>Orange</PieFlavor>
</record>
<record>
<PieFlavor>Orange</PieFlavor>
</record>
</xml>
在这个XML文件中,元素xml,record和PieFlavor总是在那里。
我需要做的是每隔一定数量的记录(如每1000条记录,拆分文件)拆分xml文件,然后在每次PieFlavor中的文本从最后一条变为文本时拆分文件。所以,如果最后一个PieFlavor是Cherry并且当前的味道是Orange,那么分割文件。但是如果最后一个PieFlavor是Cherry并且当前PieFlavor是樱桃,那么继续并将文件分割成每一定数量的记录。
我把记录拆分了下来,然后当我学会了我必须以另一种方式拆分文件时卡住了。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
<xsl:param name="recordNum" select="1000"/>
<xsl:template match="xml">
<xsl:for-each-group select=".//record"
group-adjacent="(position()-1) idiv $recordNum">
<xsl:result-document href="file:///{WATCHTEMPFOLDER}{format-number(position(),'000000000')}.xml">
<xml>
<xsl:copy-of select="current-group()"/>
</xml>
</xsl:result-document>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
我还是那种学习XSLT所以我不能确定,最好的办法,同时试图保持轻松改变recordNum到更低或更高数量的能力服用。我想有一个变量跟踪元素文本,做检查或可能使用前同辈或东西,但不知道我怎么会适合在
更新时间:
这里的工作版本。再次感谢。
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" version="1.0"
encoding="UTF-8" indent="yes"/>
<xsl:param name="recordNum" select="1000"/>
<xsl:template match="xml">
<xsl:for-each-group select=".//record" group-adjacent="PieFlavor">
<xsl:variable name="flavor" select="concat(current-grouping-key(),position())"/>
<xsl:for-each-group select="current-group()" group-adjacent="(position()-1) idiv $recordNum">
<xsl:result-document href="file:///{WATCHTEMPFOLDER}{$flavor}{format-number(position(),'000000000')}.xml">
<xml>
<xsl:copy-of select="current-group()"/>
</xml>
</xsl:result-document>
</xsl:for-each-group>
</xsl:for-each-group>
</xsl:template>
</xsl:stylesheet>
这似乎是在抱怨写多个文件到同一个URI。我将结果文档放在嵌套的分组中,当我调试它时,它似乎被当前组的内部循环捕获() – Oron
我将定义一个' ',然后使用该变量作为文件名的一部分,以确保获得结果文档的唯一文件名。 –
啊谢谢你,完美的作品,谢谢。我认为它必须以某种方式使用另一个变量。 – Oron