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

Subject: Re: [xsl] removing nodes to parent based on all child nodes not having text value
From: "Vasu Chakkera" <vasucv@xxxxxxxxx>
Date: Thu, 4 Dec 2008 10:13:17 +0000
Cindy,
There are two questions in your mail.
>In the new XML I only need to copy the nodes that actually have elements that have text values. Is there a way to test >the deepest child of an element for text value and then copy all it's ancestors back to the root?


and the scond is :

>>If any child elements have text value for the element <Individual> all child nodes should be copied, while the >><Business> element and all it's child nodes should not be copied to the new XML file.

The first one is fairly simple..

<xsl:template match="node()|@*">
<xsl:copy>
 <xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>

<xsl:template match="*[not(descendant::text())]"/>
</xsl:stylesheet>

Will do your job. That is i am ignoring the elements that do not have
any text node descendants..

for the second one,

its not very clear what you want.

if between <individual> and <business>,  only one has the text data ,
then your problem is solved by above template. but
if <individual> and <business> both contain text data , then  you
would only want to pick one and not both.
So which one would you want to pick?
which has priority over the other?

Vasu

2008/12/3 Cindy Lard <Cindy.Lard@xxxxxxxxxxx>:
> I am new to XSLT and I am trying to clean up an XML file built from a mainframe generated text file that contains all possible elements for all nodes. In the new XML I only need to copy the nodes that actually have elements that have text values. Is there a way to test the deepest child of an element for text value and then copy all it's ancestors back to the root? For example, in the attached input under the element <Entity> only <Individual> or <Business> should exist and not both. If any child elements have text value for the element <Individual> all child nodes should be copied, while the <Business> element and all it's child nodes should not be copied to the new XML file. See example input and output files.
>
> Input
>
>
> <Registration>
>  <UserName>DID1901</UserName>
>  <ActivityType>25</ActivityType>
>  <ActivityDate>2008-10-30T12:10:26</ActivityDate>
>  <RegistrationCounty>19</RegistrationCounty>
>  <Registrants>
>  <Registrant>
>   <Entity>
>    <Individual>
>     <Prefix/>
>     <FirstName></FirstName>/>
>     <LastName></LastName>/>
>     <Middle/>
>     <Suffix/>
>    </Individual>
>    <Business>
>     <MailingAddress>
>      <Address>
>       <MailingAddressType/>
>       <MailingAddressLine1>123 Street</MailingAddressLine1>
>       <MailingAddressLine2/>
>      </Address>
>     </MailingAddress>
>    </Business>
>   </Entity>
>  </Registrant>
>  </Registrants>
> </Registration>
>
>
>
> Output
>
>
> <Registration>
>  <UserName>DID1901</UserName>
>  <ActivityType>25</ActivityType>
>  <ActivityDate>2008-10-30T12:10:26</ActivityDate>
>  <RegistrationCounty>19</RegistrationCounty>
>  <Registrants>
>  <Registrant>
>   <Entity>
>    <Individual>
>     <Prefix/>
>     <FirstName>Joe</FirstName>/>
>     <LastName>Doe</LastName>/>
>     <Middle/>
>     <Suffix/>
>    </Individual>
>   </Entity>
>  </Registrant>
>  </Registrants>
> </Registration>
>
>



-- 
Vasu Chakkera
Numerical Algorithms Group Ltd.
Oxford
www.vasucv.com

Current Thread