我的XSLT当前具有以下结构:
<xsl:template match="/" xml:space="preserve">
<html>
<head>
<!--stuff here -->
</head>
<body>
<!--stuff here -->
<xsl:call-template name="page-content" />
<!--stuff here -->
</body>
</html>
</xsl:template>
上面的文件正在由其他XSLT文件导入,这些文件实现了该page-content
模板。这是一个示例页面内容模板:
<xsl:template name="page-content">
<div class="main-container">
<div class="row">
<xsl:apply-templates select="data/document/content/node()" mode="copy" />
</div>
</div>
</xsl:template>
我想获取所返回的XML转换后的XML page-content
,并将另一个模板与其匹配。(模板将向“ main-container”添加另一个节点)。我正在使用XSLT 3.0
我是否可以两次转换XML,如果可以,我该怎么做?
这是一个简单的(非常人为的)示例:
XML格式
<lines>
<line id="1"/>
<line id="2"/>
<line id="3"/>
<line id="4"/>
<line id="5"/>
<line id="6"/>
<line id="7"/>
<line id="8"/>
<line id="9"/>
<line id="10"/>
<line id="11"/>
<line id="12"/>
<line id="13"/>
<line id="14"/>
<line id="15"/>
<line id="16"/>
<line id="17"/>
<line id="18"/>
<line id="19"/>
<line id="20"/>
<line id="21"/>
<line id="22"/>
<line id="23"/>
<line id="24"/>
<line id="25"/>
</lines>
XSLT 2.0
<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:template match="/lines">
<!-- first-pass -->
<xsl:variable name="pages">
<xsl:call-template name="paginate">
<xsl:with-param name="lines" select="line"/>
</xsl:call-template>
</xsl:variable>
<!-- output -->
<output>
<xsl:apply-templates select="$pages"/>
</output>
</xsl:template>
<xsl:template match="page">
<xsl:copy>
<xsl:attribute name="number">
<xsl:number/>
</xsl:attribute>
<xsl:copy-of select="line"/>
</xsl:copy>
</xsl:template>
<xsl:template name="paginate">
<xsl:param name="lines"/>
<xsl:param name="pagesize" select="10"/>
<page>
<xsl:copy-of select="$lines[position() le $pagesize]"/>
</page>
<xsl:if test="count($lines) gt $pagesize">
<xsl:call-template name="paginate">
<xsl:with-param name="lines" select="$lines[position() gt $pagesize]"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
结果
<?xml version="1.0" encoding="UTF-8"?>
<output>
<page number="1">
<line id="1"/>
<line id="2"/>
<line id="3"/>
<line id="4"/>
<line id="5"/>
<line id="6"/>
<line id="7"/>
<line id="8"/>
<line id="9"/>
<line id="10"/>
</page>
<page number="2">
<line id="11"/>
<line id="12"/>
<line id="13"/>
<line id="14"/>
<line id="15"/>
<line id="16"/>
<line id="17"/>
<line id="18"/>
<line id="19"/>
<line id="20"/>
</page>
<page number="3">
<line id="21"/>
<line id="22"/>
<line id="23"/>
<line id="24"/>
<line id="25"/>
</page>
</output>
第一遍将线分为10组;第二组将线分为10组。然后第二遍处理组。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句