我是XSLT的新手。 我有一个输入XML文件,需要显示为不同的输出XML。我正在使用xslt进行转换。 输入XML:
<Row>
<Column>abc.xyz.ijm</Column>
<Row>
输出XML:
<abc>
<xyz>
<ijm>String</ijm>
</xyz>
</abc>
我尝试使用xsl:when with substring-before和substring-after函数,但结果xml并不接近我想要的。
如何知道'。'的最后一次出现。这样就构造了<ijm>String</ijm>
,然后是在'。'之前出现的每一个之前找到的单词的结束标记。这样可以添加</xyz> and </abc>
,如上面的输出xml所示?
任何代码段都不会赞赏。
提前致谢。
答案 0 :(得分:0)
此转化:
<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="Column/text()" name="tokenize">
<xsl:param name="pText" select="."/>
<xsl:if test="string-length()">
<xsl:choose>
<xsl:when test="not(contains($pText,'.'))">
<xsl:element name="{$pText}">String</xsl:element>
</xsl:when>
<xsl:otherwise>
<xsl:element name="{substring-before($pText,'.')}">
<xsl:call-template name="tokenize">
<xsl:with-param name="pText"
select="substring-after($pText,'.')"/>
</xsl:call-template>
</xsl:element>
</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
应用于提供的XML文档(更正格式正确):
<Row>
<Column>abc.xyz.ijm</Column>
</Row>
生成想要的正确结果:
<abc>
<xyz>
<ijm>String</ijm>
</xyz>
</abc>
<强>解释强>:
带有停止条件的递归调用命名模板:$pText
参数是空字符串或不包含句点字符的字符串。
中级操作:在“。”之前创建一个名称为子字符串的元素。在第一个句点字符作为参数之后,然后用文本递归调用自己。
停止操作:创建一个带名称的元素 - 参数中的整个字符串,以及值:字符串"String"
。