如何使用此
进行XSLT<lines>
<data>
a
</data>
<data>
b
</data>
<data>
a
</data>
<data>
b
</data>
<data>
c
</data>
<data>
b
</data>
<data>
c
</data>
</lines>
此
<resultdata>
b,b,b
</resultdata>
据我所知,我应该使用
<xsl:for-each select="/data">
和
<xsl:if test="data(text)='b'">
和
<xsl:text>, </xsl:text>
但究竟是怎么回事?
答案 0 :(得分:3)
而不是这样做......
<xsl:for-each select="/data">
你需要这样做......
<xsl:for-each select="/lines/data">
这是因为初始/
表示文档节点,它是lines
的父节点。但是,如果您当时位于lines
元素上(通过位于匹配lines
的模板中),实际上会更好。然后你可以这样做(因为没有前面的/
表达式然后相对于当前节点。)
<xsl:for-each select="data">
要检查节点的文本,您需要执行以下操作:
<xsl:if test="text()='b'">
或者更确切地说,因为你有空格,你应该这样做:
<xsl:if test="normalize-space()='b'">
或者更好的是,您将条件添加到xsl:for-each
本身。
<xsl:for-each select="data[normalize-space() = '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>