Ureader.com  
Microsoft software help and Community
   home   |   control panel login   |   archive   |  
 
XML
data.xmlanalysis
mappoint.webservice
msf
msxml-webrelease
netmyservices.sdk
passport.sdk
soap
soapsdk
uddi.general
uddi.programming
uddi.specification
xml
xmlsqlwebrelease
xsl
  
 
date: Mon, 11 Feb 2008 08:32:35 +0100,    group: microsoft.public.xsl        back       


XML to XML conversion using XSL   
Hello,

 I am trying to convert a XML scheme A to a XML scheme B, using XSL 1.0. Can 
someone help me ?

Many thanks.

-------------------------------------------------------------------------------------------------------

Here is the schemes :

Scheme A :

<node TEXT="ROOT">
    <node TEXT="N1">
        <node TEXT="N11"/>
        <node TEXT="N12"/>
        <node TEXT="N13"/>
    <node/>
    <node TEXT="N2">
        <node TEXT="N21"/>
        <node TEXT="N22"/>
        <node TEXT="N23"/>
    <node/>
<node/>

Scheme B :

<TEST_PLAN>
<PLAN ID="0">
    <GROUP ID="1">
        <FEATURE ID="3"> <FEATURE/>
        <FEATURE ID="4"> <FEATURE/>
        <FEATURE ID="5"> <FEATURE/>
    <GROUP/>
    <GROUP ID="2">
        <FEATURE ID="6"> <FEATURE/>
        <FEATURE ID="7"> <FEATURE/>
        <FEATURE ID="8"> <FEATURE/>
    <GROUP/>
<PLAN/>
<TEST_PLAN/>
date: Mon, 11 Feb 2008 08:32:35 +0100   author:   Jean-s?bastien LEROY

Re: XML to XML conversion using XSL   
Jean-sébastien LEROY wrote:

>  I am trying to convert a XML scheme A to a XML scheme B, using XSL 1.0. Can 
> someone help me ?


> Here is the schemes :
> 
> Scheme A :
> 
> <node TEXT="ROOT">
>     <node TEXT="N1">
>         <node TEXT="N11"/>
>         <node TEXT="N12"/>
>         <node TEXT="N13"/>
>     <node/>
>     <node TEXT="N2">
>         <node TEXT="N21"/>
>         <node TEXT="N22"/>
>         <node TEXT="N23"/>
>     <node/>
> <node/>

That is not even well-formed XML, assuming you want

<node TEXT="ROOT">
     <node TEXT="N1">
         <node TEXT="N11"/>
         <node TEXT="N12"/>
         <node TEXT="N13"/>
     </node>
     <node TEXT="N2">
         <node TEXT="N21"/>
         <node TEXT="N22"/>
         <node TEXT="N23"/>
     </node>
</node>


> Scheme B :
> 
> <TEST_PLAN>
> <PLAN ID="0">
>     <GROUP ID="1">
>         <FEATURE ID="3"> <FEATURE/>
>         <FEATURE ID="4"> <FEATURE/>
>         <FEATURE ID="5"> <FEATURE/>
>     <GROUP/>
>     <GROUP ID="2">
>         <FEATURE ID="6"> <FEATURE/>
>         <FEATURE ID="7"> <FEATURE/>
>         <FEATURE ID="8"> <FEATURE/>
>     <GROUP/>
> <PLAN/>
> <TEST_PLAN/>

That is not well-formed either, assuming you want

<TEST_PLAN>
<PLAN ID="0">
     <GROUP ID="1">
         <FEATURE ID="3"> </FEATURE>
         <FEATURE ID="4"> </FEATURE>
         <FEATURE ID="5"> </FEATURE>
     </GROUP>
     <GROUP ID="2">
         <FEATURE ID="6"> </FEATURE>
         <FEATURE ID="7"> </FEATURE>
         <FEATURE ID="8"> </FEATURE>
     </GROUP>
</PLAN>
</TEST_PLAN>

then the following stylesheet

<xsl:stylesheet
   xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
   version="1.0">

   <xsl:output method="xml" indent="yes"/>

   <xsl:template match="/">
     <TEST_PLAN>
       <xsl:apply-templates select="*"/>
     </TEST_PLAN>
   </xsl:template>

   <xsl:template match="node[@TEXT = 'ROOT']">
     <PLAN ID="0">
       <xsl:apply-templates select="*"/>
     </PLAN>
   </xsl:template>

   <xsl:template match="/node/node">
     <GROUP ID="{position()}">
       <xsl:apply-templates select="*"/>
     </GROUP>
   </xsl:template>

   <xsl:template match="/node/node/node">
     <FEATURE ID="{position() + count(../../node | 
../preceding-sibling::node/node)}"></FEATURE>
   </xsl:template>

</xsl:stylesheet>

produces the wanted output.



-- 

	Martin Honnen --- MVP XML
	http://JavaScript.FAQTs.com/
date: Mon, 11 Feb 2008 13:38:08 +0100   author:   Martin Honnen

Google
 
Web ureader.com


    COPYRIGHT 2007, YARDI TECHNOLOGY LIMITED, ALL RIGHT RESERVE  |   contact us