我有以下xml
<?xml version="1.0" encoding="utf-8"?>
<Root>
<Number>2</Number>
<Vehicle>
<V4Code>PP03340105</V4Code>
<SourceCode>PP03340105</SourceCode>
<DRCCode>PP03340105</DRCCode>
<OptionalCode1>ANDREA WILLIAM|DWIGHT ROBINSON|04</OptionalCode1>
</Vehicle>
</Root>
尝试使用下面给出的方法进行拆分
<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="text()" name="split">
<xsl:param name="pText" select="Root/OptionalCode1"/>
<xsl:if test="string-length($pText)">
<xsl:if test="not($pText=.)">
<br />
</xsl:if>
<xsl:element name ="Name1">
<xsl:value-of select=
"substring-before(concat($pText,'|'),'|')"/>
</xsl:element>
<xsl:call-template name="split">
<xsl:with-param name="pText" select=
"substring-after($pText, '|')"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
输出就是这样:
<?xml version="1.0" encoding="UTF-8"?>
Anyhelp非常感谢。我不确定我犯了什么错误。由于我是这个xslt的新手,不知道如何找到我犯错的行。
输出应为
<Root>
<List1>Andrea William</List1>
<List2>Dwight Robinson</List2>
</Root>
答案 0 :(得分:1)
<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="Root">
<xsl:copy>
<xsl:call-template name="split">
<xsl:with-param name="pText" select="Vehicle/OptionalCode1"/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template match="text()" name="split">
<xsl:param name="pText" />
<xsl:param name="level" select="1"/>
<xsl:if test="string-length($pText)">
<!--We don't want numeric-only values in our list -->
<xsl:if test="translate($pText, '0123456789', '')">
<!--use the level to construct an incrementing List element name -->
<xsl:element name ="List{$level}">
<xsl:value-of select=
"substring-before(concat($pText,'|'),'|')"/>
</xsl:element>
</xsl:if>
<xsl:call-template name="split">
<xsl:with-param name="pText" select=
"substring-after($pText, '|')"/>
<!--increment the level, used to construct List element names -->
<xsl:with-param name="level" select="$level + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
</xsl:stylesheet>