Xml 列表子列表的XSLT逗号分隔

Xml 列表子列表的XSLT逗号分隔,xml,xslt,Xml,Xslt,如何从这里使用XSLT <lines> <data> a </data> <data> b </data> <data> a </data> <data> b </data> <data> c </data> <data> b </data>

如何从这里使用XSLT

<lines>
  <data>
    a
  </data>
  <data>
    b
  </data>
  <data>
    a
  </data>
  <data>
    b
  </data>
  <data>
    c
  </data>
  <data>
    b
  </data>
  <data>
    c
  </data>
</lines>

A.
B
A.
B
C
B
C
这个


b、 b,b
据我所知,我将使用

<xsl:for-each select="/data"> 



但具体如何做呢?

而不是这样做

 <xsl:for-each select="/data"> 
要检查节点的文本,需要执行以下操作:

<xsl:if test="text()='b'">
尝试以下XSLT开始您的工作:

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" />

    <xsl:template match="lines">
        <resultdata>
            <xsl:for-each select="data[normalize-space() = 'b']">
                <xsl:if test="position() > 1">
                    <xsl:text>, </xsl:text>
                </xsl:if>
                <xsl:value-of select="normalize-space()" />
            </xsl:for-each>
        </resultdata>
    </xsl:template>
</xsl:stylesheet>

, 

可能只是旁注的重复:如果使用更惯用的
xsl:apply-templates
语法而不是
xsl:for-each
,xslt的声明性性质会更好。我这样说的原因是,许多人很快就习惯了“为每一个”的模式,然后尝试着用它做任何事情,直到他们最终发现一个需要应用模板能力的问题。这很好,而且很有效!现在,我必须将此方案扩展到实际示例(在下一篇评论中)
 <xsl:for-each select="/data"> 
<xsl:for-each select="/lines/data"> 
<xsl:for-each select="data"> 
<xsl:if test="text()='b'">
<xsl:if test="normalize-space()='b'">
<xsl:for-each select="data[normalize-space() = 'b']">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes" />

    <xsl:template match="lines">
        <resultdata>
            <xsl:for-each select="data[normalize-space() = 'b']">
                <xsl:if test="position() > 1">
                    <xsl:text>, </xsl:text>
                </xsl:if>
                <xsl:value-of select="normalize-space()" />
            </xsl:for-each>
        </resultdata>
    </xsl:template>
</xsl:stylesheet>