XML Editor
Sign up for a WebBoard account Sign Up Keyword Search Search More Options... Options
Chat Rooms Chat Help Help News News Log in to WebBoard Log in Not Logged in
Show tree view Topic
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Posttop
Dominic EdmondsSubject: How do I copy and create new elements with different namespaces and the identity template
Author: Dominic Edmonds
Date: 21 Jan 2010 09:04 AM
Hi folks,

I would like to insert new element 'posn' as a child of the 'field' elements into a tree variable 'testvar' which is in the 'myns' namespace.

Here is my XSL:

[code]
<?xml version="1.0"?>
<xsl:stylesheet version="2.0"
xmlns:myns="example.com"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:output method="xml" indent="yes" encoding="UTF-8"/>
<xsl:strip-space elements="*"/>
<xsl:output omit-xml-declaration="yes"/>

<xsl:variable name="testvar" xmlns="myns">
<fields attr1="attr text 1" attr2="attr text 2">
<field attr3="attr text 3">
<name>Field Name 1</name>
<desc>Field Desc 1</desc>
</field>
<field>
<name>Field Name 2</name>
<desc>Field Desc 2</desc>
</field>
<field>
<name>Field Name 3</name>
<desc>Field Desc 3</desc>
</field>
</fields>
</xsl:variable>

<xsl:variable name="newtestvar">
<xsl:apply-templates select="$testvar" mode="test"/>
</xsl:variable>

<xsl:template match="field" mode="test">
<xsl:copy>
<xsl:apply-templates select="@* | node()" mode="test"/>
<xsl:element name="posn">
<xsl:value-of select="concat('Field posn ', position(), ' ?= ')"/>
<xsl:number/>
</xsl:element>
</xsl:copy>
</xsl:template>

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

<xsl:template match="/">
<xsl:sequence select="$newtestvar" />
</xsl:template>

</xsl:stylesheet>
[code]

This gives me:

[code]
<fields xmlns="myns" attr1="attr text 1" attr2="attr text 2">
<field attr3="attr text 3">
<name>Field Name 1</name>
<desc>Field Desc 1</desc>
</field>
<field>
<name>Field Name 2</name>
<desc>Field Desc 2</desc>
</field>
<field>
<name>Field Name 3</name>
<desc>Field Desc 3</desc>
</field>
</fields>
[code]

whereas I would like to see the 'posn' element thusly:

[code]
<fields xmlns="myns" attr1="attr text 1" attr2="attr text 2">
<field attr3="attr text 3">
<name>Field Name 1</name>
<desc>Field Desc 1</desc>
<desc>Field Posn 1</desc>
</field>
<field>
<name>Field Name 2</name>
<desc>Field Desc 2</desc>
<desc>Field Posn 2</desc>
</field>
<field>
<name>Field Name 3</name>
<desc>Field Desc 3</desc>
<desc>Field Posn 3</desc>
</field>
</fields>
[code]

I need to keep the 'myns' namespace and I am sure that the answer lies in something to do with namespaces and the identity template.

 
Topic Page 1 2 3 4 5 6 7 8 9 Go to previous topicPrev TopicGo to next topicNext Topic
Download A Free Trial of Stylus Studio 6 XML Professional Edition Today! Powered by Stylus Studio, the world's leading XML IDE for XML, XSLT, XQuery, XML Schema, DTD, XPath, WSDL, XHTML, SQL/XML, and XML Mapping!  
go

Log In Options

Site Map | Privacy Policy | Terms of Use | Trademarks
Stylus Scoop XML Newsletter:
W3C Member
Stylus Studio® and DataDirect XQuery ™are from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2016 All Rights Reserved.