Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > XSLT:best manner to browse a file

Reply
Thread Tools

XSLT:best manner to browse a file

 
 
naima.mans@gmail.com
Guest
Posts: n/a
 
      12-20-2006
Hello

I'm newbie to XSLT and i need some advice please:

Here the action:
I have to browse an XML file with xslt :
For each node i have to determinate if it is a node where i need to add
an attribute...

The question is:
What is the best manner to browse the xml file? (prefix browse,
postfixe browse??)

an example:
THE XML FILE:
<persone>
<id>123</id>
<name>samantha</name>
<adresse>
<id>abc</id>
<road> wall street </road>
</adresse>
</personne>

THE RESULT after XSLT transformation: (i have copy the ID attribut in
the father node)

<persone id=123>
<id>123</id>
<name>samantha</name>
<adresse id=abc>
<id>abc</id>
<road> wall street </road>
</adresse>
</personne>


thanks a lot

Tachi

 
Reply With Quote
 
 
 
 
p.lepin@ctncorp.com
Guest
Posts: n/a
 
      12-20-2006

http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> Here the action:
> I have to browse an XML file with xslt :
> For each node i have to determinate if it is a node where
> i need to add an attribute...


It's easily done with identity transformation and exclusion
templates. By the way, the wording of your question
probably indicates that you're thinking about your problem
in terms of imperative programming. That's generally a very
bad idea when working with XSLT. You should be thinking in
terms of template matches and selecting nodesets you need,
that'll make it so much easier to figure out how you should
go about your problems.

> What is the best manner to browse the xml file? (prefix
> browse, postfixe browse??)


I'm not sure what you mean by prefix browse/postfix browse,
or, for that matter, what do you mean by browse where XSLT
is concerned, but as I said, using the identity
transformation seems to be the best way to solve your
problem.

> THE XML FILE:
> <persone>
> <id>123</id>
> <name>samantha</name>
> <adresse>
> <id>abc</id>
> <road> wall street </road>
> </adresse>
> </personne>


That's not well-formed. It's a good idea to post examples
without obvious, easily fixable mistakes when you're asking
for help. Posting examples *with* obvious, easily fixable
mistakes is a very *bad* idea on the other hand.

> <persone id=123>
> <id>123</id>
> <name>samantha</name>
> <adresse id=abc>
> <id>abc</id>
> <road> wall street </road>
> </adresse>
> </personne>


That's, uh, even less well-formed. XML 1.0 spec clearly
states (see the AttValue definition) that attribute values
must be enclosed in either quotes or apostrophes.

The following transformation should work:

<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">
<!-- identity transformation -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!-- exclusion template -->
<xsl:template match="*[id]">
<xsl:copy>
<xsl:attribute name="id">
<xsl:value-of select="id"/>
</xsl:attribute>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>

--
Pavel Lepin

 
Reply With Quote
 
 
 
 
naima.mans@gmail.com
Guest
Posts: n/a
 
      12-20-2006
Hello M lepin

ho sorry for the example..

thanks a lot for your help..

i have use the identity method and adapt your XSLT.. it works now

i have a question about you code:
<xsl:template match="*[id]">
what does *[id] means please?

For information here is the worked code... thanks again:

<xsl:stylesheet version="1.0"
xmlnssl="http://www.w3.org/1999/XSL/Transform">
<xslutput method="xml" version="1.0" encoding="UTF-8" indent="yes"
/>

<!-- identity transformation -->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>

<!-- exclusion template -->
<xsl:template match="//THE_NODE_1_WICH_WILL_BE_ENRICH">
<xsl:copy>
<xsl:for-each select="THE_NODE_WICH_WILL_ENRICH_THE_NODE_1">
<xsl:attribute name="{local-name(.)}">
<xsl:value-of select="VALUE" />
</xsl:attribute>
</xsl:for-each>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>

</xsl:stylesheet>

 
Reply With Quote
 
p.lepin@ctncorp.com
Guest
Posts: n/a
 
      12-20-2006

Please quote what you're replying to. Not everyone here
is using Google Groups to read the newsgroups. The proper
etiquette is to provide some context by quoting parts of
the original post you're replying to (and only those parts)
and insert your replies under the relevant quotes.

(E-Mail Removed) wrote:
> i have a question about you code:
> <xsl:template match="*[id]">
> what does *[id] means please?


You should try reading some decent XPath tutorial. In this
case *[id] means that this template matches any element
nodes that have element children named 'id'.

> <!-- exclusion template -->
> <xsl:template match="//THE_NODE_1_WICH_WILL_BE_ENRICH">
> <xsl:copy>
> <xsl:for-each
> select="THE_NODE_WICH_WILL_ENRICH_THE_NODE_1">
> <xsl:attribute name="{local-name(.)}">
> <xsl:value-of select="VALUE" />
> </xsl:attribute>
> </xsl:for-each>


That doesn't look too good, but, heck, whatever works for
you.

> <xsl:apply-templates select="@*|node()" />
> </xsl:copy>
> </xsl:template>


--
Pavel Lepin

 
Reply With Quote
 
naima.mans@gmail.com
Guest
Posts: n/a
 
      12-20-2006

(E-Mail Removed) a écrit :

> > <!-- exclusion template -->
> > <xsl:template match="//THE_NODE_1_WICH_WILL_BE_ENRICH">
> > <xsl:copy>
> > <xsl:for-each
> > select="THE_NODE_WICH_WILL_ENRICH_THE_NODE_1">
> > <xsl:attribute name="{local-name(.)}">
> > <xsl:value-of select="VALUE" />
> > </xsl:attribute>
> > </xsl:for-each>

>
> That doesn't look too good, but, heck, whatever works for
> you.
>
> > <xsl:apply-templates select="@*|node()" />
> > </xsl:copy>
> > </xsl:template>

>


ha... any suggestion will be very appreciate... why it doesn't look
good?

thanks

tachi

 
Reply With Quote
 
p.lepin@ctncorp.com
Guest
Posts: n/a
 
      12-21-2006

(E-Mail Removed) wrote:
> (E-Mail Removed) a écrit :
> > > <!-- exclusion template -->
> > > <xsl:template
> > > match="//THE_NODE_1_WICH_WILL_BE_ENRICH">
> > > <xsl:copy>
> > > <xsl:for-each
> > > select="THE_NODE_WICH_WILL_ENRICH_THE_NODE_1">
> > > <xsl:attribute name="{local-name(.)}">
> > > <xsl:value-of select="VALUE" />
> > > </xsl:attribute>
> > > </xsl:for-each>

> >
> > That doesn't look too good, but, heck, whatever works
> > for you.
> >
> > > <xsl:apply-templates select="@*|node()" />
> > > </xsl:copy>
> > > </xsl:template>

>
> ha... any suggestion will be very appreciate... why it
> doesn't look good?


It's hard to tell whether there's anything wrong with the
code without a real example (the above is pseudo-codish if
I got that right), but, generally, for-each in neophytes'
code is a bad sign. It seems to denote that they're
thinking about their transformations in inappropriate
terms.

XSLT is a functional language at heart, and it simply
doesn't work all that well if you're trying to use it
imperatively. It's not even the question of conceptual
purity,--whatever works, as I said,--it's just that
approaching problems the same way you did while coding in
C++/Java/Perl/PHP/{imperative language of your choice}
tends to lead you down a lot of blind alleys. Getting the
right mindset from the start seems to help a lot.

--
Pavel Lepin

 
Reply With Quote
 
naima.mans@gmail.com
Guest
Posts: n/a
 
      12-21-2006
Hello M lepin ,

I see...

i'm going to change my "programming" reflexion into an "xml" one ..

thanks a lot for your advices...

++

tachi

(E-Mail Removed) a écrit :

> (E-Mail Removed) wrote:
> > (E-Mail Removed) a écrit :
> > > > <!-- exclusion template -->
> > > > <xsl:template
> > > > match="//THE_NODE_1_WICH_WILL_BE_ENRICH">
> > > > <xsl:copy>
> > > > <xsl:for-each
> > > > select="THE_NODE_WICH_WILL_ENRICH_THE_NODE_1">
> > > > <xsl:attribute name="{local-name(.)}">
> > > > <xsl:value-of select="VALUE" />
> > > > </xsl:attribute>
> > > > </xsl:for-each>
> > >
> > > That doesn't look too good, but, heck, whatever works
> > > for you.
> > >
> > > > <xsl:apply-templates select="@*|node()" />
> > > > </xsl:copy>
> > > > </xsl:template>

> >
> > ha... any suggestion will be very appreciate... why it
> > doesn't look good?

>
> It's hard to tell whether there's anything wrong with the
> code without a real example (the above is pseudo-codish if
> I got that right), but, generally, for-each in neophytes'
> code is a bad sign. It seems to denote that they're
> thinking about their transformations in inappropriate
> terms.
>
> XSLT is a functional language at heart, and it simply
> doesn't work all that well if you're trying to use it
> imperatively. It's not even the question of conceptual
> purity,--whatever works, as I said,--it's just that
> approaching problems the same way you did while coding in
> C++/Java/Perl/PHP/{imperative language of your choice}
> tends to lead you down a lot of blind alleys. Getting the
> right mindset from the start seems to help a lot.
>
> --
> Pavel Lepin


 
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
Reading little-endian data from a file in a portable manner chrisbazley@bigfoot.com C Programming 46 08-07-2010 01:05 PM
Assigning value to Browse button without using browse button in HTML balakrishnan.dinesh@gmail.com Javascript 0 10-12-2007 06:45 AM
how to read data in text file, extract and display in tabular manner in excel doc? maylee21@gmail.com C++ 3 06-20-2007 09:46 AM
Internet Explorer 6 Can't Browse, Other Programs Browse Fine... Ike Computer Support 1 08-02-2005 09:20 PM
How access xml file in a thread-safe manner, using classic asp? Mats Olsson ASP General 9 09-14-2004 09:10 PM



Advertisments