Xslt xsl中两个字段的连接
我有一些xml字段,需要将所有字段连接到一个字段中Xslt xsl中两个字段的连接,xslt,Xslt,我有一些xml字段,需要将所有字段连接到一个字段中 <fields> <field name="first"><value>example</value></field> <field name="last"><value>hello</value></field> <field name="age"><value>25</value></fiel
<fields>
<field name="first"><value>example</value></field>
<field name="last"><value>hello</value></field>
<field name="age"><value>25</value></field>
<field name="enable"><value>1</value></field>
<fields>
例子
你好
25
1.
我需要转换如下
<fields>
<field name="all"><value>example hello 25 1</value></field>
</field>
示例hello 25 1
使用XSL的空格分隔符类似于:
...
<fields>
<field name="all">
<value><xsl:apply-templates select="fields/field"/></value>
</field>
</fields>
...
<xsl:template match="field[value/text()]">
<xsl:value-of select="value"/>
<xsl:if test="position() != last()"><xsl:text> </xsl:text></xsl:if>
</xsl:template>
...
。。。
...
...
此简短而简单(无明确的条件指令)的XSLT 1.0转换:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<fields>
<field name="all">
<xsl:variable name="vfieldConcat">
<xsl:for-each select="field/value">
<xsl:value-of select="concat(., ' ')"/>
</xsl:for-each>
</xsl:variable>
<value><xsl:value-of select=
"normalize-space($vfieldConcat)"/></value>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档时(已纠正格式良好):
<fields>
<field name="first">
<value>example</value>
</field>
<field name="last">
<value>hello</value>
</field>
<field name="age">
<value>25</value>
</field>
<field name="enable">
<value>1</value>
</field>
</fields>
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
例子
你好
25
1.
生成所需的正确结果:
<fields>
<field name="first">
<value>example</value>
</field>
<field name="last">
<value>hello</value>
</field>
<field name="age">
<value>25</value>
</field>
<field name="enable">
<value>1</value>
</field>
</fields>
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
示例hello 25 1
II。XSLT 2.0解决方案
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/*">
<fields>
<field name="all">
<value><xsl:value-of select="field/value"/></value>
</field>
</fields>
</xsl:template>
</xsl:stylesheet>
当此转换应用于相同的XML文档(如上)时,会产生相同的正确结果:
<fields>
<field name="first">
<value>example</value>
</field>
<field name="last">
<value>hello</value>
</field>
<field name="age">
<value>25</value>
</field>
<field name="enable">
<value>1</value>
</field>
</fields>
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
<fields>
<field name="all">
<value>example hello 25 1</value>
</field>
</fields>
示例hello 25 1
解释:使用的默认值是单个空格这一事实。如何处理不包含文本的
值
元素?那应该是三个空格还是只有一个?例如,example 25
或example 25
?如果value元素为null,则不应存在任何空格。我认为如果将xsl:If
中的空格放在xsl:value的。