指定 id 的每个列表值的 XSLT
Posted
技术标签:
【中文标题】指定 id 的每个列表值的 XSLT【英文标题】:XSLT for each list value for specified id 【发布时间】:2017-03-12 02:32:38 【问题描述】:我尝试在深层参数中列出值,但只指定参数。 我为 706 号的每个测试 id 执行此操作,当我为每个测试 ID 执行并列出值名称时。我需要在值之间使用太多分号,但不是在开头和结尾。
XML:
<parameters>
<section id="27" name="Parametry produktu"/>
<parameter id="23" name="kolor">
<value id="42" name="jasny róż"/>
</parameter>
<parameter id="25" name="skład">
<value id="43" name="97% bawełna, 3% poliamid"/>
</parameter>
<parameter id="706" name="rozmiar (ukryć)"">
<value id="717" name="46"/>
<value id="718" name="47"/>
<value id="719" name="48"/>
</parameter>
<parameter id="142" name="płeć (ukryć)">
<value id="746" name="ona"/>
</parameter>
</parameters>
XSLT:
<sizes3>
<xsl:for-each select="parameters">
<xsl:if test="parameter/@id = 706">
<xsl:for-each select="parameter">
<xsl:choose>
<xsl:when test="position() = 1">
<xsl:value-of select="value/@name" />
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('; ', value/@name)" />
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</xsl:if>
</xsl:for-each>
</sizes3>
结果是:
<sizes3>jasny róż; 97% bawełna, 3% poliamid;46; ona;</sizes3>
但我需要:
<sizes3>46;47;48</sizes3>
【问题讨论】:
【参考方案1】:这是一种方法:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/parameters">
<!-- other stuff ? -->
<sizes3>
<xsl:for-each select="parameter[@id=706]/value">
<xsl:value-of select="@name" />
<xsl:if test="position()!=last()">
<xsl:text>;</xsl:text>
</xsl:if>
</xsl:for-each>
</sizes3>
<!-- more stuff ? -->
</xsl:template>
</xsl:stylesheet>
【讨论】:
【参考方案2】:更简单、更短、没有 <xsl:for-each>
、没有 XSLT 条件运算符:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<size3><xsl:apply-templates/></size3>
</xsl:template>
<xsl:template match="parameter[@id=706]/value">
<xsl:apply-templates select="@name"/>
</xsl:template>
<xsl:template match="parameter[@id=706]/value[position() > 1]" priority="2">
<xsl:text>;</xsl:text><xsl:apply-templates select="@name"/>
</xsl:template>
</xsl:stylesheet>
【讨论】:
以上是关于指定 id 的每个列表值的 XSLT的主要内容,如果未能解决你的问题,请参考以下文章