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
Go to previous topicPrev TopicGo to next topicNext Topic
Posttop
Ivan PedruzziSubject: Build safe NCName
Author: Ivan Pedruzzi
Date: 02 Aug 2011 04:12 PM
A recent post triggered my interest on how to create valid NCName while processing any arbitrary string.

Take the following example,


XML Input

<root>
<nc>1a</nc>
<nc>!@#$%^&amp;1</nc>
</root>

You need to use the content of element nc to create XML dynamically like in the following XSLT 1.0 code

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<root>
<xsl:for-each select="/root/nc/text()">
<xsl:element name="."/>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>

As you may expect the above code throws run-time error

XTDE0820: Element name <.> is not a valid QName


The attached stylesheet provide a simple template that convert any arbitrary string to a valid NCName


<root>
<xsl:for-each select="/root/nc/text()">
<xsl:variable name="nc">
<xsl:call-template name="makeNCName">
<xsl:with-param name="str" select="."/>
</xsl:call-template>
</xsl:variable>
<xsl:element name="{$nc}"/>
</xsl:for-each>
</root>
</xsl:template>

Hope this helps
Ivan











Documentncname.zip

 
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.