?
Solved

How to grab new node section via xsl ?

Posted on 2011-02-18
5
Medium Priority
?
439 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

Preface This article introduces an authentication and authorization system for a website.  It is understood by the author and the project contributors that there is no such thing as a "one size fits all" system.  That being said, there is a certa…
The Confluence of Individual Knowledge and the Collective Intelligence At this writing (summer 2013) the term API (http://dictionary.reference.com/browse/API?s=t) has made its way into the popular lexicon of the English language.  A few years ago, …
The viewer will learn the benefit of using external CSS files and the relationship between class and ID selectors. Create your external css file by saving it as style.css then set up your style tags: (CODE) Reference the nav tag and set your prop…
HTML5 has deprecated a few of the older ways of showing media as well as offering up a new way to create games and animations. Audio, video, and canvas are just a few of the adjustments made between XHTML and HTML5. As we learned in our last micr…
Suggested Courses

770 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