Subject: Re: Probelm with xsl:value-of in CSV to XML transform
From: Marney Cotterill <marney@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 04 Apr 2008 13:17:20 +1100
|
Thanks Michael,
You are right! I am brand new to XML and XSLT and am still getting my head
around template rules and how to use them.
Sorry for being unclear, my source input is a CSV file, and this problem
lies in the second transform template that takes the XML of the converted
CSV and adds in the bits and pieces I need to fit the dynamic website I will
be importing it to.
> The test <xsl:when test="name()='classdate'"> suggests that you haven't yet
> learnt how to use template rules, which is the core construct for
> structuring XSLT code. When you have conditional logic in the stylesheet
> that performs different processing for different elements, create a template
> rule for each kind of element and invoke it using xsl:apply-templates.
The XSLT stylesheet at the bottom of the first post is almost complete, do
you see any errors that may arise in the future by keeping it as
<xsl:when...>?
Kindest Regards,
Marney
On 4/4/08 1:10 PM, "Michael Kay" <mike@xxxxxxxxxxxx> wrote:
>> I am converting a CSV into XML, and wanted to transform the
>> following two tags:
>> <classdate>9/03/2008</classdate>
>> <sortdate>2008-03-09</sortdate>
>
> I see two elements there with four tags... And I don't see any
> comma-separated values!
>>
>> Into:
>> <classdate>
>> <items>
>> <item>
>> <label>9/03/2008</label>
>> <value>2008-03-09</value
>> </item>
>> </items>
>> </classdate>
>>
>> Where the <sortdate> value becomes the <value> of the <classdate>
>>
>> I am almost there, but can't get the value of the <sortdate>
>> to appear in the <value> tag.
>>
>> Here is the relevant section of the XSLT:
>> <xsl:when test="name()='classdate'">
>> <xsl:element name="classdate">
>> <items>
>> <item>
>> <label>
>> <xsl:value-of select="."/>
>> </label>
>> <value>
>> <xsl:value-of select="sortdate"/>
>> </value>
>> </item>
>> </items>
>> </xsl:element>
>> </xsl:when>
>>
>
> The sortdate isn't a child of the classdate, it is a sibling. So you want
>
> <xsl:value-of select="following-sibling::classdate[1]"/>
>
> (I've added the [1] because your snippet of the input doesn't tell me if
> there are any other following siblings)
>
> The test <xsl:when test="name()='classdate'"> suggests that you haven't yet
> learnt how to use template rules, which is the core construct for
> structuring XSLT code. When you have conditional logic in the stylesheet
> that performs different processing for different elements, create a template
> rule for each kind of element and invoke it using xsl:apply-templates.
>
> Also, <xsl:element name="classdate"> is best replaced by <classdate>.
>
> Michael Kay
> http://www.saxonica.com/
>
>
Marney Cotterill
graphic designer
cracker//brandware
6 Bourke Street
Queens Park
NSW 2022
Telephone 02 9387 2001
Facsimile 02 9387 2006
marney@xxxxxxxxxxxxxxxxxxxx
www.crackerbrandware.com
|