?
Solved

How to grab new node section via xsl ?

Posted on 2011-02-18
5
Medium Priority
?
445 Views
Last Modified: 2013-11-08
I have an xsl which reads 1 xml file that contains 2 differently named nodes. This xsl grabs the value of an element from 1st node and compares it to that of the attribute from 2nd node.
If found I want to retrieve the entire node from 2nd node. Not just the attribute or element containing the attribute. But also the parent node.
Please advise on proper syntax for this.

I've attached input.xml and test.xsl
test.xsl
input.xml
0
Comment
Question by:badtz7229
  • 3
  • 2
5 Comments
 
LVL 60

Accepted Solution

by:
Geert Bormans earned 2000 total points
ID: 34926502
This seems to be what you want
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   version="1.0">

    <xsl:output indent="yes"/>
    <xsl:key name="zone" match="edt[@name = 'zones']/ce/data/zone" use="locations/location/@code"/>
    
    <xsl:template match = "/">
        <xsl:apply-templates select="ROOT/edt[@name='country']"/>
    </xsl:template>
    
    
    <xsl:template match="edt[@name='country']">
            <edt>
                <xsl:attribute name="name">ResultZone</xsl:attribute>
                <xsl:for-each select="ce">
                    <ce>
                        <xsl:copy-of select="code"/>
                        <xsl:call-template name="GetZonesTemp">
                            <xsl:with-param name="country" select="code"/>
                        </xsl:call-template>
                    </ce>
                </xsl:for-each>
            </edt>
        
    </xsl:template>
    
    
    <xsl:template name="GetZonesTemp">
        <xsl:param name="country"/>
         <desc>
            <xsl:choose>
                <xsl:when test="key('zone', $country)">
                <xsl:copy-of select="key('zone', $country)"/>
                </xsl:when>
                <xsl:otherwise>
                    <xsl:value-of select="'Not  found'"/>
                </xsl:otherwise>
            </xsl:choose>          
        </desc>
    </xsl:template>
    
</xsl:stylesheet>

Open in new window

0
 

Author Closing Comment

by:badtz7229
ID: 34926641
yes. that is excactly what i was looking for. thanks a lot.
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 34926665
welcome
0
 

Author Comment

by:badtz7229
ID: 34927064
Gertone:
i have another quick question. not sure if i can ask after i've closed this tix, but here goes anyway:

What if the input file is now one which contains various <locations> within a <sub-zone> element and I only want to return node of that 1 sub-zone that matches ?

Right now with your help, my resulting xml returns the matching zone with matching locations alongside all the other locations as well.  i want to reduce it to return only matching records not everything else included in the child node.

see attached input file and output file.
input.xml
Output.xml
0
 
LVL 60

Expert Comment

by:Geert Bormans
ID: 34931748
I just saw your follow up question en answered there.
I don't have a problem to continue following up on questions, but I was out yesterday evening
and posting a new questions has the benefit of potential other experts to step in
and gives you a faster return

cheers

Geert
0

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction Since I wrote the original article about Handling Date and Time in PHP and MySQL several years ago, it seemed like now was a good time to update it for object-oriented PHP.  This article does that, replacing as much as possible the pr…
Create a Windows 10 custom Image with custom task bar and custom start menu using XML for deployment.
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:
The viewer will learn how to count occurrences of each item in an array.
Suggested Courses

840 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question