xsl-list
[Top] [All Lists]

Re: [xsl] removing nodes to parent based on all child nodes not having text value

2008-12-08 11:10:57
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>


--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>