Xml 列表子列表的XSLT逗号分隔
如何从这里使用XSLTXml 列表子列表的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>
<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>