当前位置: 首页 > 知识库问答 >
问题:

为什么我的输出不是逗号分隔的列表?

子车俊材
2023-03-14

我是XSLT新手。我试图在XML 1.0中解析结果并生成:

Keyword A,Keyword B,Keyword C,Keyword D

但没有显示分隔符。我刚得到结果

Keyword A Keyword B Keyword C Keyword D 

我的XML和XSLT代码如下:

Product.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="style.xsl" ?>
<products>
    <product id="1" name="My Product">
        <keywords>
            <keyword>
                Keyword A
            </keyword>
            <keyword>
                Keyword B
            </keyword>
            <keyword>
                Keyword C
            </keyword>
            <keyword>
                Keyword D
            </keyword>
        </keywords>
    </product>
</products>

style.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
            <body>      
            <xsl:for-each select="products/product">
                <xsl:for-each select="keywords">
                    <xsl:choose>
                        <xsl:when test="position()=last()">
                            <xsl:value-of select="current()"/>
                        </xsl:when>                 
                        <xsl:otherwise>
                            <xsl:value-of select="current()"/>
                            <xsl:text>&#44;</xsl:text>
                        </xsl:otherwise>
                    </xsl:choose>
                </xsl:for-each>
            </xsl:for-each>
            </body>
        </html>
    </xsl:template>
</xsl:stylesheet>

我已经看过XSLT中的if-else语句,但找不到答案。

共有2个答案

劳彦
2023-03-14

请注意,在XSLT2.0中,您可以

<xsl:for-each select="products/product">
  <xsl:value-of select="keywords/keyword" separator=","/>
</xsl:for-each>

如果您必须手动插入分隔符,那么为了避免不必要的前瞻,最好将它们放在除第一个之外的每个元素之前,而不是除最后一个之外的每个元素之后:所以

<xsl:for-each select="products/product/keywords/keyword">
    <xsl:if test="position() != 1">,</xsl:if>
    <xsl:value-of select="."/>
</xsl:for-each>
皇甫俊雅
2023-03-14

改变

<xsl:for-each select="keywords">

<xsl:for-each select="keywords/keyword">

否则,您将迭代单个关键字元素,进入第一个xsl:when,因为唯一的位置等于最后一个位置,并输出关键字的字符串值,这将是关键字子项的所有字符串值的串联,不带任何逗号。

 类似资料:
  • 我做了这个程序来计算一组数字 输出如下所示 有什么办法可以让另一个逗号分开吗?

  • 问题内容: 我有看起来像这样的数据: 对于每个customer_id,我需要用逗号分隔的列表,以指示该客户运营的月份: 等等。如何使用SQL Server 2005 SQL(而不是T-SQL)轻松生成此逗号分隔的列表? 我在Stack Overflow和其他地方在这里看到的大多数解决方案似乎都是基于联接多个行值而不是列值来创建逗号分隔的列表: T-SQL FOR XML路径(’‘) 关联的子查询与

  • 问题内容: 我返回的值包含255个逗号分隔的值。有没有一种简单的方法可以将其拆分为不具有255 substr的列? 到 问题答案: 您可以使用: 我建议您在Excel(或其他电子表格)中生成255个数字的列,并使用电子表格生成SQL代码。

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。

  • 问题内容: 我有类似的东西 就像 是否有可能使它更像 既然我想要的数据还是文本的? 问题答案: 您可以使用@XmlList使其成为空格分隔的值。 对于以逗号分隔的列表,您将需要使用XmlAdapter。有关XmlAdapter的更多信息,请参见: http://bdoughan.blogspot.com/2010/07/xmladapter-jaxbs-secret-weapon.html

  • 问题内容: 我需要运行类似的查询: 但是我希望子选择返回逗号分隔的列表,而不是数据列。这有可能吗?如果可以,怎么办? 问题答案: 您可以使用GROUP_CONCAT执行该操作,例如