我想转换这个XML来创建多页标记作为我的XSLT输出,假设每页有3个标记,那么我的结果如下所示:
我可以做我需要做的任何事情,除了将它们分组到页面中。
INPUT XML:
<root>
<element>a</element>
<element>b</element>
<element>c</element>
<element>e</element>
<element>f</element>
<element>g</element>
<element>h</element>
<element>i</element>
</root>
XSLT RESULT XML:
<root>
<page num="1">
<element>a</element>
<element>b</element>
<element>c</element>
</page>
<page num="2">
<element>d</element>
<element>e</element>
<element>f</element>
</page>
<page num="3">
<element>g</element>
<element>h</element>
</page>
</root>我尝试过position() mod X,但顺序似乎很重要,因为我试图分解XML10单独的文件,而以这种方式使用exsl:document会导致每次都覆盖文件,只保留最后一个元素:
<exsl:document href="chunk-{position() mod 10}.xml">似乎我需要按顺序循环它们(1-3,然后4-6,然后7-8)。
注意:我在linux上使用xsltproc,所以它支持EXSL,但不支持XSLT2.0。
发布于 2012-10-19 20:11:36
试试这个:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="element[position() mod 3 = 1]" />
</xsl:copy>
</xsl:template>
<xsl:template match="element">
<page num="{position()}">
<xsl:copy-of select=". | following-sibling::element[position() < 3]" />
</page>
</xsl:template>
</xsl:stylesheet>这是一个简单的例子,但它应该足以演示原理。
发布于 2012-10-19 20:08:14
您可以将示例输入转换为所需的输出,如下所示:
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="block-size" select="3"/>
<xsl:output indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="@* | node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="root">
<xsl:copy>
<xsl:apply-templates select="element[(position() - 1) mod $block-size = 0]" mode="page"/>
</xsl:copy>
</xsl:template>
<xsl:template match="element" mode="page">
<page num="{position()}">
<xsl:apply-templates select=". | following-sibling::element[position() < $block-size]"/>
</page>
</xsl:template>
</xsl:stylesheet>因此,样式表接受一个输入文档并创建一个输出文档,如示例所示。
您还提到了exsl:document,但我不确定您想要用它做什么,因为您想要的结果似乎是单个文档。因此,如果这是需求的一部分,请显示您要创建的不同文档的示例。
https://stackoverflow.com/questions/12972976
复制相似问题