有人可以帮忙吗?我是XSLT的新手,我正在尝试构建一个元素表;我在下面简化了我的例子,并设法将输出输出到三个单元格的行上,但是我在行之间得到了不需要的空格 - 有谁能告诉我这里我做错了什么?
我的行匹配中还需要两个<apply-templates />
吗?
非常感谢, 亚历
这是XML:
<?xml version="1.0" encoding="iso-8859-1"?>
<products>
<r t='title1'>...</r>
<r t='title2'>...</r>
<r t='title3'>...</r>
<r t='title4'>...</r>
<r t='title5'>...</r>
<r t='title6'>...</r>
<r t='title7'>...</r>
<r t='title8'>...</r>
<r t='title9'>...</r>
</products>
这是XSL:
<!-- Rows -->
<xsl:template match="r[position() mod 3 = 1]">
<div class="row">
<xsl:apply-templates mode="cell" select="." />
<xsl:apply-templates mode="cell" select="./following-sibling::r[not(position() > 2)]" />
</div>
</xsl:template>
<!-- Cells -->
<xsl:template match="r" mode="cell">
<div class="cell">
<xsl:value-of select="@t"/>
</div>
</xsl:template>
MY OUTPUT(注意行之间不需要的空格):
<div class="row">
<div class="cell">Title1</div>
<div class="cell">Title2</div>
<div class="cell">Title3</div>
</div>
<div class="row">
<div class="cell">Title4</div>
<div class="cell">Title5</div>
<div class="cell">Title6</div>
</div>
<div class="row">
<div class="cell">Title7</div>
<div class="cell">Title8</div>
<div class="cell">Title9</div>
</div>
答案 0 :(得分:0)
好吧,从那开始就不能是你的XML,因为那是无效的。 “有效”XML文件无法包含多个根元素。您的XML在根目录中有九个“r”元素。
在尝试使用XSLT处理之前先从有效的东西开始。
这个XSL(注意我添加了一个模板来消除任何text()的匹配,因为你的“...”会匹配:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:template match="r[position() mod 3 = 1]">
<div class="row">
<xsl:apply-templates mode="cell" select="." />
<xsl:apply-templates mode="cell" select="./following-sibling::r[not(position() > 2)]" />
</div>
</xsl:template>
<xsl:template match="r" mode="cell">
<div class="cell">
<xsl:value-of select="@t"/>
</div>
</xsl:template>
<xsl:template match="text()"/>
</xsl:stylesheet>
使用Saxon生成此输出(根本没有新行):
<?xml version="1.0" encoding="utf-8"?><div class="row"><div class="cell">title1</div><div class="cell">title2</div><div class="cell">title3</div></div><div class="row"><div class="cell">title4</div><div class="cell">title5</div><div class="cell">title6</div></div><div class="row"><div class="cell">title7</div><div class="cell">title8</div><div class="cell">title9</div></div>
如果添加&lt; xsl:output indent =“yes”/&gt;对此,您将获得您期望的确切输出。除非为&lt; products&gt;指定匹配项,否则您还会获得无效的XML输出输出根标签。