xslt-1.0 を使用して、入力 xml を csv 出力に変換しようとしています。以下は私の入力xml形式です。
<input>
<add add-value="First Name">
<value type="string">New</value>
</add>
<add add-value="Surname">
<value type="string">user1</value>
</add>
<add add-value="Title">
<value type="string">engineer</value>
</add>
<add add-value="Description">
<value type="string">New joinee.</value>
</add>
<add .....
</add>
</input>
出力csvは、xsltの変数を介して提供している固定数の列で構成されています。
以下は私のxsltです:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ext="http://exslt.org/common" >
<xsl:variable name="delimiter" select="','"/>
<xsl:template match="input/add">
<xsl:variable name="SplitWordsSet">
<xsl:call-template name="split">
<xsl:with-param name="pText" select="'First name,Surname,Phone number,Description,Title'"/>
</xsl:call-template>
</xsl:variable>
<xsl:variable name="vSplitWords" select="ext:node-set($SplitWordsSet)/*"/>
<xsl:call-template name="counter">
<xsl:with-param name="split-words" select="$vSplitWords"/>
<xsl:with-param name="count"select="1"/>
</xsl:call-template>
</xsl:template>
<!-- Below templtate splits the pText values -->
<xsl:template name="split">
<xsl:param name="pText"/>
<xsl:param name="pElemName" select="'word'"/>
<xsl:variable name="first" select="substring-before(concat($pText,','),',')"/>
<xsl:variable name="remaining" select="substring-after($pText,',')"/>
<xsl:element name="{$pElemName}">
<xsl:value-of select="$first"/>
</xsl:element>
<xsl:choose>
<xsl:when test="$remaining">
<xsl:call-template name="split">
<xsl:with-param name="pText" select="$remaining"/>
<xsl:with-param name="pElemName" select="$pElemName"/>
</xsl:call-template>
</xsl:when>
</xsl:choose>
</xsl:template>
<!-- below is recursive template to maintain count of columns values -->
<xsl:template name="counter">
<xsl:param name="count" select="1"/>
<xsl:param name="split-words"/>
<xsl:variable name="split-word" select="$split-words[$count]"/>
<xsl:if test="$count < 6">
<xsl:call-template name="output-csv">
<xsl:with-param name="field-value" select="*[(@add-value = '$split-word')]/value"/>
</xsl:call-template>
<xsl:value-of select="$delimiter"/>
<xsl:call-template name="counter">
<xsl:with-param name="count" select="$count + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template name="output-csv">
<xsl:param name="field-value"/>
<xsl:value-of select="$field-value"/>
</xsl:template>
</xsl:stylesheet>
私が興味を持っている追加値属性は param として渡されpText
ます。これらの値は、出力 csv の列です。
私の期待される出力:
First name,Surname,Phone number,Description,Title
New,User1,,New joinee,engineer
しかし、私は目的の出力を得ることができません,,,,,
。