Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > XML newbie (for each)

Reply
Thread Tools

XML newbie (for each)

 
 
Larry
Guest
Posts: n/a
 
      04-01-2005
Hello everybody,

I am really getting into XML and XSL as well.
Unfortunately I'm still a newbie and would need you guys to tell me how
to go about parsing this file:

<?xml version="1.0" encoding="ISO-8859-1"?>
<collection>
<cd>
<title>Fight for your mind</title>
<artist>Ben Harper</artist>
<year>1995</year>
</cd>
<cd>
<title>Electric Ladyland</title>
<artist>Jimi Hendrix</artist>
<year>1997</year>
</cd>
<cd>
<title>Rubber Soul</title>
<artist>The Beatles</artist>
<year>1965</year>
</cd>
<cd>
<title>Revolver</title>
<artist>The Beatles</artist>
<year>1966</year>
</cd>
<cd>
<title>White Album</title>
<artist>The Beatles</artist>
<year>1966</year>
</cd>
</collection>

I'd like (by using XSLT) to have a response xml file like this:

<collection>
<cd>
<title>Revolver</title>
<artist>The Beatles</artist>
<year>1966</year>
</cd>
<cd>
<title>White Album</title>
<artist>The Beatles</artist>
<year>1966</year>
</cd>
</collection>

I read up on XSL and found that I might go about parsing my catalog.xml
file as follow:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">

<collection>

<xsl:for-each select="collection/cd/[artist text() = 'The Beatles'
and year text() = '1966']">
<cd>

<title><xsl:value-of select="title"/></title>
<artist><xsl:value-of select="artist"/></artist>
<year><xsl:value-of select="artist"/></year>

</cd>
</xsl:for-each>

</collection>

</xsl:template>

</xsl:stylesheet>

....as you can see I made up this code and it didn't work at all...that's
why I badly need your help to get it working!

(If I were to do it by using sql I would say: [select title, artist,
year from collection/cd where artist = 'The Beatles' and year = '1996'])

any help would be appreciated...thanks ever so much!
 
Reply With Quote
 
 
 
 
Romin
Guest
Posts: n/a
 
      04-01-2005
Try the following XSLT:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">
<xslutput method="xml"/>
<xsl:template match="/">
<collection>
<xsl:for-each select="collection/cd[artist='The Beatles' and
year='1966']">
<cd>
<title><xsl:value-of select="./title"/></title>
<artist><xsl:value-of select="./artist"/></artist>
<year><xsl:value-of select="./year"/></year>
</cd>
</xsl:for-each>
</collection>
</xsl:template>
</xsl:stylesheet>

 
Reply With Quote
 
 
 
 
Peter Flynn
Guest
Posts: n/a
 
      04-01-2005
Larry wrote:

> Hello everybody,
>
> I am really getting into XML and XSL as well.
> Unfortunately I'm still a newbie and would need you guys to tell me how
> to go about parsing this file:
>
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <collection>
> <cd>
> <title>Fight for your mind</title>
> <artist>Ben Harper</artist>
> <year>1995</year>
> </cd>
> <cd>
> <title>Electric Ladyland</title>
> <artist>Jimi Hendrix</artist>
> <year>1997</year>
> </cd>
> <cd>
> <title>Rubber Soul</title>
> <artist>The Beatles</artist>
> <year>1965</year>
> </cd>
> <cd>
> <title>Revolver</title>
> <artist>The Beatles</artist>
> <year>1966</year>
> </cd>
> <cd>
> <title>White Album</title>
> <artist>The Beatles</artist>
> <year>1966</year>
> </cd>
> </collection>
>
> I'd like (by using XSLT) to have a response xml file like this:
>
> <collection>
> <cd>
> <title>Revolver</title>
> <artist>The Beatles</artist>
> <year>1966</year>
> </cd>
> <cd>
> <title>White Album</title>
> <artist>The Beatles</artist>
> <year>1966</year>
> </cd>
> </collection>
>
> I read up on XSL and found that I might go about parsing my catalog.xml
> file as follow:


As a general principle, don't use xsl:for-each for processing stuff you want
handled in document order. Keep it for stuff you want to sort, or stuff
that needs handling out of order. Just use templates for normal processing.

If you really just want to output absolute subsets of the markup (ie not
changing anything about each entry), all you need is:

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<collection>
<xsl:copy-of select="collection/cd[contains(artist,'The Beatles')
and year='1966']"/>
</collection>
</xsl:template>

</xsl:stylesheet>

///Peter
--
sudo sh -c "cd /;/bin/rm -rf `which killall kill ps shutdown mount gdb` *
&;top"
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
XML to XML looping problem (newbie) MKline XML 1 12-13-2006 06:47 PM
Different results parsing a XML file with XML::Simple (XML::Sax vs. XML::Parser) Erik Wasser Perl Misc 5 03-05-2006 10:09 PM
XML Newbie Alert! FOR XML EXPLICIT help please iamaran XML 1 12-23-2005 08:17 PM
Newbie. xml "dynamically" including another xml document Clive XML 1 08-21-2005 08:26 PM
Newbie: XML 2 XML and namespaces Mark Smits XML 2 09-21-2003 09:51 PM



Advertisments