xsl-list
[Top] [All Lists]

Re: [xsl] Probelm with xsl:value-of in CSV to XML transform

2008-04-03 19:19:02
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(_at_)saxonica(_dot_)com> 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/


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



Marney Cotterill
graphic designer
                   
cracker//brandware

6 Bourke Street
Queens Park 
NSW 2022
Telephone 02 9387 2001
Facsimile 02 9387 2006
marney(_at_)crackerbrandware(_dot_)com
www.crackerbrandware.com



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--