我有xml的这个样本:
<row>
<cell type="editorOnly">
<note type="firstName">John Adam</note>
<note type="lastName">Taylor</note>
</cell>
<cell type="editorOnly">
<note type="firstName">Doug</note>
<note type="lastName">Miller</note>
</cell>
<cell type="editorOnly">
<note type="firstName">Peter</note>
<note type="lastName">Henderson</note>
</cell>
</row>
我试图像这样显示:
Taylor,John Adam,Doug Miller&amp;彼得亨德森(编辑。)
(姓氏后面跟着行中第一个单元格的名字,而后面是第一个名称,后面是单元格的 rest 的姓名。)< / p>
我已经制作了这个xslt,但它按照我想要的方式选择:
<xsl:template match="TEI:cell[@type='editorOnly']">
<span class="editor">
<b>
<xsl:choose>
<xsl:when test="child::TEI:note[@type='lastName']">
<xsl:apply-templates select="TEI:note[@type='lastName']"/>
<xsl:text>, </xsl:text>
<xsl:apply-templates select="TEI:note[@type='firstName']"/>
</xsl:when>
</xsl:choose>
</b>
<span>
<xsl:text> (edit.)</xsl:text>
</span>
<xsl:if test="following-sibling::TEI:cell[@type='editor']">
<xsl:choose>
<xsl:when test="following-sibling::TEI:cell[@type='editor'][position()!=last()]">
<xsl:text>, </xsl:text>
</xsl:when>
<xsl:otherwise>
<xsl:text> & </xsl:text>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</span>
</xsl:template>
我做错了什么?
KSR
答案 0 :(得分:0)
姓氏后跟行中第一个单元格的名字,以及 比名字后面的第一个名称 rest
我猜你想做点什么:
<xsl:template match="row">
<span class="editor">
<b>
<xsl:for-each select="cell[@type='editorOnly']">
<xsl:choose>
<xsl:when test="position()=1">
<xsl:value-of select="note[@type='lastName']"/>
<xsl:text>, </xsl:text>
<xsl:apply-templates select="note[@type='firstName']"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="note[@type='firstName']"/>
<xsl:text> </xsl:text>
<xsl:apply-templates select="note[@type='lastName']"/>
</xsl:otherwise>
</xsl:choose>
<xsl:choose>
<xsl:when test="position()=last() - 1">
<xsl:text> & </xsl:text>
</xsl:when>
<xsl:when test="position()!=last()">
<xsl:text>, </xsl:text>
</xsl:when>
</xsl:choose>
</xsl:for-each>
<span>
<xsl:text> (edit.)</xsl:text>
</span>
</b>
</span>
</xsl:template>