xslt用于显示具有名称的表

时间:2016-08-25 14:16:29

标签: xml xslt

我有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> &amp; </xsl:text>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:if>
        </span>
    </xsl:template>

我做错了什么?

KSR

1 个答案:

答案 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> &amp; </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>