[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: removing nodes to parent based on all child nodes

Subject: Re: removing nodes to parent based on all child nodes not having text value
From: "Cindy Lard" <Cindy.Lard@xxxxxxxxxxx>
Date: Mon, 08 Dec 2008 10:09:52 -0600
Re:  removing nodes to parent based on all child nodes
Ken....thank you so very much.  I believe this will work nicely.


In this case there only needs to be either <Individual> or <Business> under
<Entity>. Either the registration is for an individual or business. Both
should not exist in the same file. Because the business registration
information is being pulled from a legacy system certain information required
in the XML may not be available, such as <MailingAddressType/> and
<MailingAddressLine2/> as in the preceding example. However, if any descendant
element of a child has a text value such as <MailingAddressLine1>123
Street</MailingAddressLine1> it's parent and siblings all need to be copied
even if those siblings have no text value the nodes need to be copied.
Fine, that's a one line change, and the result is below.



If no descendant elements have a text value as is the case with <Individual>
that node and all descendant nodes of that element need to be stripped out.
Wow, I hope that wasn't too confusing.
Yes it wasn't too confusing. Having the example helps.



All the templates I have used thus far will strip out any element with no text
value, which removes the needed (dare I say required) elements of
<MailingAddressType/> and <MailingAddressLine2/> under the <Address> element.
I hope the code below helps. All I changed was the match criteria for the
elements that are preserved. It is all in how you say it! :{)}

. . . . . . . . . Ken


T:\ftemp>type cindy.xsl<?xml version="1.0"
encoding="US-ASCII"?><xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" (
http://www.w3.org/1999/XSL/Transform%22 );
                version="1.0">
<!--preserve all elements whose descendant has text or who has a parent that
    has a leaf child with text--><xsl:template
match="*[.//*[normalize-space(.)] or
                       ../*[not(*) and normalize-space(.)]]">  <xsl:copy>
<xsl:copy-of select="@*"/>    <xsl:apply-templates/>
</xsl:copy></xsl:template>
<xsl:template match="*">  <!--do nothing for elements that don't have a text
value descendant--></xsl:template>
<xsl:template match="@*"><!--identity for all other nodes-->  <xsl:copy>
<xsl:apply-templates select="@*|node()"/>  </xsl:copy></xsl:template>

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.