XSL Transform - Why is it writing out everything?

Discussion in 'XML' started by daz_oldham, May 24, 2006.

  1. daz_oldham

    daz_oldham Guest

    Hi

    I have done the folloing XSLT and although it does write out my
    elements as I want, it is also writing out ALL of the information in
    the child nodes and attributes as it loops around.

    Any ideas would be greatly appreciated - I am sure it is something
    tiny!

    Best regards and many thanks

    Darren

    <?xml version="1.0" encoding="iso-8859-1" ?>
    <xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns1="http://www.someurl.com/abc/2002/09"
    >


    <xsl:template
    match="ns1:ABC_AccomAvailRS/ns1:AccommodationSearchResponse/ns1:Accommodations">

    This is the start of our XSLT Transformation.<br />

    <xsl:for-each select="ns1:AccommodationSegment">

    <div name="dvHotelName"
    style="background-color:#0033FF;padding:2px">
    <xsl:value-of select="@AccommodationName"/> - <xsl:value-of
    select="@OfficialRating"/>

    </div>

    <xsl:apply-templates />
    <b>
    <xsl:value-of select="ns1:Description"/>
    </b>

    </xsl:for-each>


    <br />End of the XSLT Transformation

    </xsl:template>

    <xsl:template match="ns1:Image[1]">
    <img src="{@ThumbnailURL}" />
    </xsl:template>


    </xsl:stylesheet>
    daz_oldham, May 24, 2006
    #1
    1. Advertising

  2. daz_oldham

    daz_oldham Guest

    I have been able to put in additional templates as such:

    <xsl:template match="ns1:Address" >

    </xsl:template>

    But I think that rather than solving the problem, this just hides it
    doesn't it?

    Thanks

    Darren
    daz_oldham, May 24, 2006
    #2
    1. Advertising

  3. daz_oldham wrote:
    > I have done the folloing XSLT and although it does write out my
    > elements as I want, it is also writing out ALL of the information in
    > the child nodes and attributes as it loops around.


    "All the information in the child nodes" doesn't surprise me a lot.
    You're doing an apply-templates recursion with no select, which defaults
    to processing all the children, and the default template for elements
    dumps the text content of the element. So add a select= attribute to the
    apply to tell it which ones you actually want to examine, and/or provide
    templates that treat those other elements the way you want them treated.

    I can't explain "and attributes" in this case, but I suspect that's an
    erroneous report rather than an actual behavior.

    --
    () ASCII Ribbon Campaign | Joe Kesselman
    /\ Stamp out HTML e-mail! | System architexture and kinetic poetry
    Joe Kesselman, May 24, 2006
    #3
  4. daz_oldham wrote:


    > I have done the folloing XSLT and although it does write out my
    > elements as I want, it is also writing out ALL of the information in
    > the child nodes and attributes as it loops around.



    > <xsl:apply-templates />


    You have not shown the input XML but if you do xsl:apply-templates then
    that processes all child nodes (element nodes, text nodes, comment
    nodes, processing instruction nodes) and as there are built-in default
    templates (see
    <http://www.w3.org/TR/xslt#built-in-rule>
    ) it is possible that for instance all text nodes are output.

    So either do e.g.
    <xsl:apply-templates select="someElement" />
    meaning make sure that the above apply-templates applies only to the
    element nodes you really want to be processed or make sure you override
    the built-in templates e.g.
    <xsl:template match="text()" />
    so that for instance text nodes are not output.

    Martin Honnen
    http://JavaScript.FAQTs.com/
    Martin Honnen, May 24, 2006
    #4
  5. daz_oldham

    daz_oldham Guest

    Spot on - thanks Martin, Joe for your help.

    It is remembering these little obvious things that make a massive
    difference - thanks :)

    Darren
    daz_oldham, May 24, 2006
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. suzy
    Replies:
    0
    Views:
    555
  2. Replies:
    1
    Views:
    3,589
    A. Bolmarcich
    May 27, 2005
  3. Mr. SweatyFinger
    Replies:
    2
    Views:
    1,762
    Smokey Grindel
    Dec 2, 2006
  4. Donald Adams
    Replies:
    2
    Views:
    574
    Donald Adams
    Mar 30, 2007
  5. Replies:
    1
    Views:
    86
    Mumia W.
    Feb 13, 2007
Loading...

Share This Page