Solved

How to grab new node section via xsl ?

Posted on 2011-02-18
5
429 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 500 total points
Comment Utility
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
Comment Utility
yes. that is excactly what i was looking for. thanks a lot.
0
 
LVL 60

Expert Comment

by:Geert Bormans
Comment Utility
welcome
0
 

Author Comment

by:badtz7229
Comment Utility
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
Comment Utility
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

Better Security Awareness With Threat Intelligence

See how one of the leading financial services organizations uses Recorded Future as part of a holistic threat intelligence program to promote security awareness and proactively and efficiently identify threats.

Join & Write a Comment

Most of the sites are being standardized with W3C Web Standards. W3C provides lot of web standard services to the web. They have the web specification, process and documentation for all the web standards. You can apply HTML, CSS and Accessibility st…
Browsing the questions asked to the Experts of this forum, you will be amazed to see how many times people are headaching about monster regular expressions (regex) to select that specific part of some HTML or XML file they want to extract. The examp…
The viewer will learn how to count occurrences of each item in an array.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

728 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

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now