DaniWeb IT Discussion Community

DaniWeb IT Discussion Community (http://www.daniweb.com/forums/index.php)
-   XML, XSLT and XPATH (http://www.daniweb.com/forums/forum134.html)
-   -   Adding New Element using XSLT (http://www.daniweb.com/forums/thread167809.html)

learningxslt Jan 12th, 2009 2:38 am
Adding New Element using XSLT
 
Hi All,
I have a set of elements to be added to an existing XML document. I would like to write a XSLT tranformation for this. My requirement is that I need to check whether the element is already there in the XML file. Only if its non existent, I need to add that element. I have to repeat this step for a set of elements. Also, my XML file is namespace based.

Please advise.

Regards
Ramesh

fpmurphy Jan 12th, 2009 1:13 pm
Re: Adding New Element using XSLT
 
Here is a simple example of adding an element. Suppose you have the folllowing XML document
<root>
  <list>
      <a>aaaa</a>
      <b>bbbb</b>
  </list>
</root>
and you want to add an extra element <c>. The following stylesheet is one way of adding this element.
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
  <xsl:param name="ename">c</xsl:param>
  <xsl:param name="evalue">cccc</xsl:param>

  <xsl:output method="xml" encoding="utf-8"/>

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

  <xsl:template match="list">
    <xsl:copy>
        <xsl:apply-templates/>
          <xsl:if test="not(c)">
            <xsl:element name="{$ename}"><xsl:value-of select="$evalue"/></xsl:element>
          </xsl:if>
    </xsl:copy>
  </xsl:template>

</xsl:stylesheet>
The output is
<root>
      <list>
      <a>aaaa</a>
      <b>bbbb</b>
  <c>cccc</c></list>
</root>

learningxslt Jan 15th, 2009 6:45 am
Re: Adding New Element using XSLT
 
Thanks for the help. I was trying the same thing with my examples. But it looks like only the identity transformation template is only invoked. The other template is not invoked. There is a namespace associated with the XML file. ( The schema that defines the XML has the targetnamespace). Is this why the other templates are not invoked? How to handle namespace based insertion.

Thanks

fpmurphy Jan 16th, 2009 7:47 pm
Re: Adding New Element using XSLT
 
Yes, you have to specifically handle the extra namespace issues.


All times are GMT -4. The time now is 8:55 pm.

Forum system based on vBulletin Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2003 - 2009 DaniWeb® LLC