Re: [xsl] Need help with XSLT: adding new node btw existing elements

Subject: Re: [xsl] Need help with XSLT: adding new node btw existing elements
From: Abel Online <abel.online@xxxxxxxxx>
Date: Wed, 16 Aug 2006 20:03:42 +0200
Nishi,

Not sure what you are after. It appears to me that this is the first time you are trying to create an XSLT file and run it. There's nothing wrong with that, but perhaps it is better to find some introductory material to get you started. What you have typed below has nothing to do with XSLT (no wonder it gives an error), apart perhaps from the "variable" element, though it lack the xslt namespace. This gives the feeling that you may need some basic training in XML too (see below). In XML Spy you can click "New" and select "xslt" from the list of options. Click the bottom option in the next screen (from scratch), or try the other more interactive ways of achieving your goal.

If you don't want to do it by hand, you can try Altova Map Force. Other tools around have visual XSLT editing tools as well.

A good primer for XSLT is http://www.w3schools.com/xsl and for XML http://www.w3schools.com/xml. Other pointers can be found from here: http://en.wikipedia.org/wiki/Xslt and http://en.wikipedia.org/wiki/Xml respectively and some good introduction books are available through various publishers. XSLT is not trivial and requires a bit of trial and error in the beginning, but once you are up to some speed, it rocks. One thing I can advice you to read is XSLT Cookbook 2nd Ed. from O'Reilly and the execllent XSLT/XPath Programmer's references from Wrox, by Michael Kay.

Cheers,

Abel Braaksma
http://www.nuntia.nl


Nishi Bhonsle wrote:


Hi:
Trying to load the following xsl in XMLSpy gives document mal-formed error.
Also, what if i have several occurences of the environment element in
the doc and i need to add the new nodes to a specific occurence only?
ie
If I have to add the new nodes to the environment tag that has comp id
= New, how can I change the xsl to do that?


<?xml version = '1.0' encoding = 'UTF-8'?>
<test xmlns="blabla">
<comp id="Old">
<process-type id="home" module-id="TESTER1" status="enabled">
<environment>
  <variable id="TMP" value="C:\DOCUME~1\manez\LOCALS~1\Temp"/>
</environment>
</process-type>
</comp>

<comp id="New">
<process-type id="home" module-id="TESTER" status="enabled">
<environment>
</environment>
</process-type>
</comp>
</test>

On 8/16/06, Mukul Gandhi <gandhi.mukul@xxxxxxxxx> wrote:

The transform requires to modify only the "environment" element, and
keeping rest of the structure same. To solve this problem, you require
an identity transform template, and a template to process the
"environment" element.

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

<xsl:template match="environment">
  <environment>
    <variable id="SAROOTDIR" value="D:\Dir1"/>
    <variable id="SADATADIR" value="D:\Dir2"/>
  </environment>
</xsl:template>

On 8/16/06, Nishi Bhonsle <nishiandprafull@xxxxxxxxx> wrote:
> Hi:
>
> I have the following input xml document, I need to write an xsl to transform
> it to the output xml document.
>
> Input xml document -
>
> <?xml version = '1.0' encoding = 'UTF-8'?>
> <test xmlns="blabla">
> <comp id="New">
> <process-type id="home" module-id="TESTER" status="enabled">
> <environment>
> </environment>
> </process-type>
> </comp>
> </test>
>
> Output xml document -
>
> <?xml version = '1.0' encoding = 'UTF-8'?>
> <test xmlns="blabla">
> <comp id="New">
> <process-type id="home" module-id="TESTER" status="enabled">
> <environment>
> <variable id="SAROOTDIR" value="D:\Dir1"/>
> <variable id="SADATADIR" value="D:\Dir2"/>
> </environment>
> </process-type>
> </comp>
> </test>
>
> Can someone please help write an xsl to transform the above input xml
> document into the output xml document?
>
> Thanks much!


--
Regards,
Mukul Gandhi

http://gandhimukul.tripod.com

Current Thread