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 10 11 12 13 14 15 16 17 18 19 20 Go to previous topicPrev TopicGo to next topicNext Topic
Postnext
manjunath AngadiSubject: Set the xmlns namespace depending on a condition.
Author: manjunath Angadi
Date: 31 Jul 2006 09:35 AM
Hi,

I want to set the xmlns namespace like this

if (condition1)
set the xmlns to one value
else
set it to other value.


thanks,
Manjunath

Postnext
Ivan PedruzziSubject: Set the xmlns namespace depending on a condition.
Author: Ivan Pedruzzi
Date: 31 Jul 2006 10:38 AM

Hi Manjunath,

Is it XSLT or XQuery?

Could you provide a concrete example where you need to use a condition rather then declare two namespaces with different prefix?

Hope this helps
Ivan Pedruzzi
Stylus Studio Team

Postnext
manjunath AngadiSubject: Set the xmlns namespace depending on a condition.
Author: manjunath Angadi
Date: 01 Aug 2006 01:46 AM
This is my input xml, it is generated from a jsp. And it is an input to my xsl.

<?xml version="1.0" encoding="UTF-8"?>
<xml responsetype="ERROR-BRMS" xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR" xmlns:tML="urn:int.itu/tML/tMLSchemaMetadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<response>

.............some xml elements.
</response>
</xml>


Here depending on the value of xmlns namespace, i have to generate a root node in output xml.

if xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR"
the root element in the output xml will be

<RESPONSE xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR" responsetype="ERROR">

......... some output elements......

</RESPONSE>

if xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASRnotify"
the root element in the output xml will be

<NOTIFY xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASRnotify" responsetype="ERROR">

............ some output elements.........
</NOTIFY>


please tell me what is to be done to accomplish this task.


Thanks,
Manjunath

Postnext
Tony LavinioSubject: Set the xmlns namespace depending on a condition.
Author: Tony Lavinio
Date: 01 Aug 2006 09:59 AM
First of all, you know that an xml document cannot contain an
element that starts with "xml", right? I'm assuming this is
just an example; I'm going to use "root" for the root element name.
See http://www.w3.org/TR/2004/REC-xml-20040204/#dt-name


if xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR"
the root element in the output xml will be

<xsl:choose>
<xsl:when test="namespace-uri(root) = 'http://www.atis.org/tML/UOM/ASR.UOM-ASR'">
<RESPONSE xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR" responsetype="ERROR">
......... some output elements......
</RESPONSE>
</xsl:when>
<xsl:when test="namespace-uri(root) = 'http://www.atis.org/tML/UOM/ASR.UOM-ASR'">
<NOTIFY xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASRnotify" responsetype="ERROR">
............ some output elements.........
</NOTIFY>
</xsl:when>
</xsl:choose>

Postnext
manjunath AngadiSubject: Set the xmlns namespace depending on a condition.
Author: manjunath Angadi
Date: 02 Aug 2006 05:16 AM
Originally Posted: 02 Aug 2006 02:32 AM
Hi,

I am able to read the name space and also i have created the root node depending on the condotion. this is the xsl where i read the default namespace and created the root node.

Thank you very much for your advice.

<xsl:template match="*">
<xsl:choose>
<xsl:when test="namespace-uri(*)='http://www.atis.org/tML/UOM/ASR.UOM-ASR'">
<ASR_SERVICE_RESPONSE xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR" responsetype="ERROR">

</ASR_SERVICE_RESPONSE>
</xsl:when>

but, one more problem is raised now.

it is not possilble to match a perticular element in the input xml if the default namespace exists in the input xml.

for example,

input xml.

<?xml version="1.0" encoding="UTF-8"?>
<xml responsetype="ERROR-BRMS"

xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR"

xmlns:tML="urn:int.itu/tML/tMLSchemaMetadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<exceptionlist>
<exception>
<field>parent/child/fieldname</field>
<code>001</code>
<message>errror in the field</message>

.............some xml elements.
</exception>
</exceptionlist>
</xml>

the xsl is,

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output method="xml" indent="yes"/>

<xsl:template match="exception">
<xsl:variable name="string" select"field"/>
.....apply the string functions to get the last delemited string "fieldname".........
<xsl:value-of select="$string"/>
</xsl:template>
</xsl:stylesheet>


the above xsl is working when there is no xmlns namespace in the input xml file.

but the same thing is not working when there is default namespace xmlns.

it is just selecting the values of all the elements and displaying. like


parent/child/fieldname

001

errror in the field

Please clarify the above issue. please tell me what extra need to be included in the xsl so that i can get the desired output when the default xmlns namespace is present.

(the entire summary of problem is, if there is xmlns namespace in the root element, my xsl is not working. if xmlns="..." is not present in the root element, xsl is working fine.)

Please clarify

Thanks,
Manjunath

Postnext
Ivan PedruzziSubject: Set the xmlns namespace depending on a condition.
Author: Ivan Pedruzzi
Date: 02 Aug 2006 10:42 AM

Use two different match templates and move the logic into a common named template.

<?xml version='1.0'?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:asr="http://www.atis.org/tML/UOM/ASR.UOM-ASR">

<xsl:output method="xml" indent="yes"/>

<xsl:template match="exception">
<xsl:variable name="string" select"field"/>

call named template here

<xsl:value-of select="$string"/>
</xsl:template>
</xsl:stylesheet>


<xsl:template match="asr:exception">
<xsl:variable name="string" select"asr:field"/>

call named template here

<xsl:value-of select="$string"/>
</xsl:template>
</xsl:stylesheet>


Hope this helps
Ivan Pedruzzi
Stylus Studio Team

Postnext
manjunath AngadiSubject: Set the xmlns namespace depending on a condition.
Author: manjunath Angadi
Date: 03 Aug 2006 08:42 AM
Hi ivan,

I got the solution u sent and my problem got solved.Thank you very much for your guidance.
But one more problem raised.

that is,

Some unwanted values are getting printed at the beginning of the output.

for example,

the input xml is,

<?xml version="1.0" encoding="UTF-8"?>
<xml responsetype="ERROR-BRMS"

xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR"

xmlns:tML="urn:int.itu/tML/tMLSchemaMetadata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<validation>
<project>project name</project>
<exceptionlist>
<datetime>03:08:2006:06:01:PM</datetime>
<exception>
<field>parent/child/fieldname</field>
<code>001</code>
<message>errror in the field</message>

.............some xml elements.
</exception>
</exceptionlist>
</xml>


the xsl is,
After doing all the chenges above u suggested, i m just pasting the main template where i m calling the other templates.


<xsl:template match="/">
<xsl:choose>
<xsl:when test="$response = namespace-uri(*)">
<ASR_SERVICE_RESPONSE xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASR" responsetype="ERROR">
<xsl:apply-templates mode="response"/>
</ASR_SERVICE_RESPONSE>
</xsl:when>
<xsl:when test="$notify = namespace-uri(*)">
<DESIGN_NOTIFY xmlns="http://www.atis.org/tML/UOM/ASR.UOM-ASRNotify" responsetype="ERROR">
<xsl:apply-templates mode="notify"/>
</DESIGN_NOTIFY>
</xsl:when>
</xsl:choose>
</xsl:template>

the templates i m calling with mode="response" and "notify", starts with the match attribute,

<xsl:template match="/b:xml/b:validation/b:exceptionlist" mode="response">

.......executable statements...
but not printing the value of the project.........

</template>

here, though i am not selecting the value of project, i am getting the value "project name" displayed under the root element and then the way i want the output.

I am not getting why this unnecessary value get printed in the output.

when i click on that value,

the back-map-stack displays the message like this.
<xsl:template match="/"... in filename.xsl(line 0)

Please clarify how to remove the unwanted values from the output xml?
Please tell me.


Thanks,
Manjunath


Postnext
Ivan PedruzziSubject: Set the xmlns namespace depending on a condition.
Author: Ivan Pedruzzi
Date: 03 Aug 2006 09:20 AM

You may need to override the default template for text nodes

<xsl:template match="text()"/>


Ivan Pedruzzi
Stylus Studio Team

Postnext
manjunath AngadiSubject: Set the xmlns namespace depending on a condition.
Author: manjunath Angadi
Date: 03 Aug 2006 09:25 AM
Ivan,

In which template i have to add that match="text()"?

If i add that in the main template where i m calling the other templates, i am not getting any output.

thanks,
manjunath

Postnext
Ivan PedruzziSubject: Set the xmlns namespace depending on a condition.
Author: Ivan Pedruzzi
Date: 03 Aug 2006 09:53 AM

Manjunath,

We can't help you without see the entire XSLT + XML.
If you send the files to stylus-field-report@progress.com we will take a look.

Which Stylus Studio edition are you running?


Ivan Pedruzzi
Stylus Studio Team

Posttop
manjunath AngadiSubject: Set the xmlns namespace depending on a condition.
Author: manjunath Angadi
Date: 03 Aug 2006 10:11 AM
Ivan,

I have mailed both xml and xsl files.
Except the first two values,

06/22/2006 11:46 AM

ASOG32

remaining thing exactly correct as i want.
I want only those values to be removed.

Thanks,
Manjunath

 
Topic Page 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 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.