在xsl中连接变量值 XML: XSL:
在上面的XML中,我想获取值(var1、var2、var3、var6)。将这些值放入变量中。 现在在XSL中,我想使用逗号分隔符连接变量值。但是如果任何一个变量值为空,我会得到多个逗号(,)。基本上,如果变量为空,我必须忽略它。请帮帮我。在xsl中连接变量值 XML: XSL:,xml,xslt,Xml,Xslt,在上面的XML中,我想获取值(var1、var2、var3、var6)。将这些值放入变量中。 现在在XSL中,我想使用逗号分隔符连接变量值。但是如果任何一个变量值为空,我会得到多个逗号(,)。基本上,如果变量为空,我必须忽略它。请帮帮我。 我使用的是XSLT1.0如果var1-var4UserValue元素保证在原始XML中以特定的顺序出现,那么对于每个元素都是简单的: XML: <Form id="id8" name="1234_A" accessRefs="#i
我使用的是XSLT1.0如果
var1
-var4
UserValue
元素保证在原始XML中以特定的顺序出现,那么对于每个元素都是简单的:
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>
如果var1
-var4
UserValue
元素保证以该特定顺序出现在原始XML中,那么对于每个元素都是简单的:
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>
在连接变量之前,您可以检查该变量是否为非空和非空。基于此,您只能连接那些不为null且不为空的变量。请指出XSLT 1.0或2.0。您真的需要使用这些变量吗?如果在xsl:for each
指令中对原始节点进行寻址,则会自动排除不存在的节点(这是假设空变量为空,因为它们引用的节点不存在,而不是因为节点本身为空)。嗨,michael。。我已经更新了这个问题。在连接变量之前,请先看一看,可能是您可以检查该变量是否为非空和非空。基于此,您只能连接那些不为null且不为空的变量。请指出XSLT 1.0或2.0。您真的需要使用这些变量吗?如果在xsl:for each
指令中对原始节点进行寻址,则会自动排除不存在的节点(这是假设空变量为空,因为它们引用的节点不存在,而不是因为节点本身为空)。嗨,michael。。我已经更新了这个问题。请看一看谢谢伊恩。我对[normalize-space()]谓词有一些问题,因为每个元素都没有循环。如果我删除[normalize-space()],它将对所有元素执行。@userksp很抱歉,由于原始问题缺少输入示例,我忽略了一个事实,即您所说的“值”是一个属性,而不是元素的文本内容。现在应该更好了,谢谢你,伊恩。我对[normalize-space()]谓词有一些问题,因为每个元素都没有循环。如果我删除[normalize-space()],它将对所有元素执行。@userksp很抱歉,由于原始问题缺少输入示例,我忽略了一个事实,即您所说的“值”是一个属性,而不是元素的文本内容。这现在应该更有效了。
<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>