Xml 在xsl中使用“创建新字段”命令分隔数据
你好,我需要用逗号表示数据并添加新数据Xml 在xsl中使用“创建新字段”命令分隔数据,xml,xslt,Xml,Xslt,你好,我需要用逗号表示数据并添加新数据 <fields> <field name="example"><value>example,i,am,new,to,xslt</value></field> <fields> 例如,i、am、new、to、xslt 我需要将此xml转换为 <fields> <field name="example"><value>example</val
<fields>
<field name="example"><value>example,i,am,new,to,xslt</value></field>
<fields>
例如,i、am、new、to、xslt
我需要将此xml转换为
<fields>
<field name="example"><value>example</value><value>i</value>am</value><value>new</value><value>to</value><value>xslt</value></field>
<fields>
示例IAMNewoxSLT
有人能解释一下我如何使用XSLT实现这一点吗
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:for-each select="tokenize(., ',')">
<value><xsl:value-of select="."/></value>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value" name="tokenize">
<xsl:param name="pText" select="."/>
<xsl:if test="string($pText)">
<value>
<xsl:value-of select=
"substring-before(concat($pText, ','), ',')"/>
</value>
<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select=
"substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<fields>
<field name="example">
<value>example</value>
<value>i</value>
<value>am</value>
<value>new</value>
<value>to</value>
<value>xslt</value>
</field>
</fields>
在提供的XML文档上应用此转换时(已更正!!!!格式良好):
<fields>
<field name="example">
<value>example,i,am,new,to,xslt</value>
</field>
</fields>
<fields>
<field name="example">
<value>example</value>
<value>i</value>
<value>am</value>
<value>new</value>
<value>to</value>
<value>xslt</value>
</field>
</fields>
例如,i、am、new、to、xslt
生成所需的正确结果:
<fields>
<field name="example">
<value>example,i,am,new,to,xslt</value>
</field>
</fields>
<fields>
<field name="example">
<value>example</value>
<value>i</value>
<value>am</value>
<value>new</value>
<value>to</value>
<value>xslt</value>
</field>
</fields>
例子
我
是
新的
到
xslt
II。XSLT 1.0解决方案:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:for-each select="tokenize(., ',')">
<value><xsl:value-of select="."/></value>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value" name="tokenize">
<xsl:param name="pText" select="."/>
<xsl:if test="string($pText)">
<value>
<xsl:value-of select=
"substring-before(concat($pText, ','), ',')"/>
</value>
<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select=
"substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<fields>
<field name="example">
<value>example</value>
<value>i</value>
<value>am</value>
<value>new</value>
<value>to</value>
<value>xslt</value>
</field>
</fields>
将此转换应用于同一XML文档(如上)时,会产生相同的正确结果:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:for-each select="tokenize(., ',')">
<value><xsl:value-of select="."/></value>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value" name="tokenize">
<xsl:param name="pText" select="."/>
<xsl:if test="string($pText)">
<value>
<xsl:value-of select=
"substring-before(concat($pText, ','), ',')"/>
</value>
<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select=
"substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<fields>
<field name="example">
<value>example</value>
<value>i</value>
<value>am</value>
<value>new</value>
<value>to</value>
<value>xslt</value>
</field>
</fields>
例子
我
是
新的
到
xslt
说明:
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value">
<xsl:for-each select="tokenize(., ',')">
<value><xsl:value-of select="."/></value>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="value" name="tokenize">
<xsl:param name="pText" select="."/>
<xsl:if test="string($pText)">
<value>
<xsl:value-of select=
"substring-before(concat($pText, ','), ',')"/>
</value>
<xsl:call-template name="tokenize">
<xsl:with-param name="pText" select=
"substring-after($pText, ',')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
<fields>
<field name="example">
<value>example</value>
<value>i</value>
<value>am</value>
<value>new</value>
<value>to</value>
<value>xslt</value>
</field>
</fields>
值匹配的模板
tokenize()
tokenize()
函数的东西——因为XPath 1.0/XSLT 1.0中没有定义tokenize()
值的模板
与执行逗号标记化的命名模板合并