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
Postnext
Nagarjuna SSubject: XSLT for dynamic target fields
Author: Nagarjuna S
Date: 18 Jul 2011 03:43 PM
Hello,

Input XML -

<?xml version="1.0" encoding="UTF-8"?>
<Createelement_MT>
<Field Name="A">
<Value>1</Value>
</Field>
<Field Name="B">
<Value>1</Value>
</Field>
...
</Createelement_MT>

Expected OutPut XML -

<?xml version="1.0" encoding="UTF-8"?>
<Createelement_MT>
<Statement><TableName><table>XYZ</table>
<access>
<A>1</A>
<B>2</B>
..
</access>
</Statement></TableName>
</Createelement_MT>

The value of the attribute 'Name' of field 'Field' should be the name of target field.

XSLT:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Createelement_MT">
<xsl:element name="statement">
<xsl:element name="TableName">
<xsl:element name="table">ABC</xsl:element>
<xsl:element name="access">
<xsl:for-each select="Field">
<xsl:element name="{@Name}">
<xsl:value-of select="Value"></xsl:value-of></xsl:element></xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

Error:
Error: at xsl:element on line 15 of file:///......: XTDE0820: Invalid element name. Invalid QName {}

Please help me with the xslt code for this requirement.
Thanks!

Postnext
Ivan PedruzziSubject: XSLT for dynamic target fields
Author: Ivan Pedruzzi
Date: 20 Jul 2011 11:09 PM

Use the following approach to ensure that the element name is valid NCNAME

<xsl:element name="{translate(@Name, translate(@Name, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'), '_')}">
<xsl:value-of select="Value"></xsl:value-of>
</xsl:element>

Postnext
Nagarjuna SSubject: XSLT for dynamic target fields
Author: Nagarjuna S
Date: 21 Jul 2011 12:37 PM
Thanks for the reply.

Iam getting an error saying - the truncate fn should have 3 arguments.

I have changed the code as follows and its working as expected now.

<xsl:for-each select="Createelement_MT/Field">
<xsl:variable name="field" select="normalize-space(@Name)"></xsl:variable>
<xsl:element name="{$field}">
<xsl:value-of select="Value"></xsl:value-of>

Posttop
Ivan PedruzziSubject: XSLT for dynamic target fields
Author: Ivan Pedruzzi
Date: 22 Jul 2011 10:58 PM

Sorry the correct code is below

Watch out because normalize-space only trims leading and trailing whitespace characters and replacing sequences of whitespace characters by a single space.

If the attribute value in your input XML may contain an invalid QName then sooner or later you will get a runtime error

Hope this helps
Ivan


here a quick example

======================
input XML


<Createelement_MT>
<Field Name="A">
<Value>A</Value>
</Field>
<Field Name=" space ">
<Value> space </Value>
</Field>

<Field Name="3number">
<Value>3number</Value>
</Field>
</Createelement_MT>

=================================
XSLT

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<xsl:template match="Createelement_MT">
<xsl:element name="statement">
<xsl:element name="TableName">
<xsl:element name="table">ABC</xsl:element>
<xsl:element name="access">
<xsl:for-each select="Field">
<xsl:element name="{translate(@Name, translate(@Name, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_', ''), '_')}">
<xsl:value-of select="Value"/>
</xsl:element>
</xsl:for-each>
</xsl:element>
</xsl:element>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

====================================
Output XML

<statement>
<TableName>
<table>ABC</table>
<access>
<A>A</A>
<_space_>space</_space_>
<_number>3number</_number>
</access>
</TableName>
</statement>




 
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.