XML:
<Form id="id8" name="1234_A" accessRefs="#id4" subType="Form" subClass="Form">
<UserData id="id10" type="Attributes">
<UserValue value="val1" title="var1"></UserValue>
<UserValue value="val2" title="var2"></UserValue>
<UserValue value="val3" title="var3"></UserValue>
<UserValue value="val4" title="var4"></UserValue>
<UserValue value="val6" title="var6"></UserValue>
<UserValue value="val7" title="var7"></UserValue>
</UserData>
</Form>
XSL:
<xsl:variable name="var1" select="$ele/plm:UserData/plm:UserValue[@title='var1']"/>
<xsl:variable name="var2" select="$ele/plm:UserData/plm:UserValue[@title='var2']"/>
<xsl:variable name="var3" select="$ele/plm:UserData/plm:UserValue[@title='var3']"/>
<xsl:variable name="var6" select="$ele/plm:UserData/plm:UserValue[@title='var6']"/>
<Cell>
<Data ss:Type="String">
<xsl:variable name="temp" select="concat($var1/@value,',',$var2/@value,',',$var3/@value,',',$var6/@value)"/>
</Data>
</Cell>
在上面的XML中,我想得到值(var1,var2,var3,var6)。将这些值变为变量。 现在在XSL中我想使用逗号分隔符连接变量值。但是如果任何变量值为空,我会得到多个逗号(,,)。基本上我必须忽略一个变量,如果它是空的。请帮我。 我正在使用XSLT1.0
答案 0 :(得分:0)
如果var1
- var4
UserValue
元素保证在原始XML中以特定顺序出现,那么它就是一个直截了当的for-each
:
<xsl:variable name="temp">
<xsl:for-each select="$ele/plm:UserData/plm:UserValue
[@title='var1' or @title='var2' or @title='var3' or @title='var6']
[normalize-space(@value)]">
<xsl:if test="position() > 1">,</xsl:if>
<xsl:value-of select="@value" />
</xsl:for-each>
</xsl:variable>
([normalize-space(@value)]
谓词排除了存在但具有空值的任何目标元素。如果不保证var1-var4顺序与文档顺序匹配,那么您需要使用技巧强制for-each以正确的顺序为您提供元素。
<xsl:variable name="ordering" select="'|var1|var2|var3|var6|'" />
<xsl:variable name="temp">
<xsl:for-each select="$ele/plm:UserData/plm:UserValue
[@title='var1' or @title='var2' or @title='var3' or @title='var6']
[normalize-space(@value)]">
<xsl:sort select="
string-length(substring-before($ordering, concat('|', @title, '|'))"
data-type="number" />
<xsl:if test="position() > 1">,</xsl:if>
<xsl:value-of select="@value" />
</xsl:for-each>
</xsl:variable>