[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

Re: [xsl] More on my problem with namespaces


Subject: Re: [xsl] More on my problem with namespaces
From: Nick Leaton <nickle@xxxxxxxxx>
Date: Tue, 9 Nov 2010 16:24:07 +0000

Using Saxon, I get this error message going the second route.

[Saxon-PE 9.2.0.6] Element type "calypso:value" must be followed by
either attribute definitions, ">" or "/>"
@see
http://www.saxonica.com/documentation/javadoc/net/sf/saxon/trans/SaxonErrorCo
de.html#SXXP0003

xslt as follows

===============
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:calypso="http://www.calypso.com/xml"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:ns3="http://www.w3.org/2001/XMLSchema"
    version="2.0">

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

    <xsl:template match="/">
        <bonds>
            <xsl:for-each select="//isin">
            <bond>
                <calypso:secCode>
                    <calypso:name>ISIN</calypso:name>
                    <calypso:value xsi:type="ns3:string"
                        xmlns:ns3="http://www.w3.org/2001/XMLSchema"
                        <xsl:value-of select="."/>
                    </calypso:value>
                </calypso:secCode>
            </bond>
        </xsl:for-each>
        </bonds>
    </xsl:template>
</xsl:stylesheet>
===============

Following the link, I'm still none the wiser.
On 9 November 2010 16:10, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> Namespaces are not attributes in the XDM view of the world, so you can't
> create them using the xsl:attribute instruction. Use the xsl:namespace
> instruction instead. Alternatively, since you know statically what
namespace
> you want output, you can just add the declaration
> xmlns:ns3="http://www.w3.org/2001/XMLSchema" to the xsl:stylesheet element.
>
> Or more simply, you could rewrite
>
> <xsl:element name="calypso:value">
>                       <xsl:attribute
> name="xsi:type">ns3:string</xsl:attribute>
>                       <xsl:attribute
> name="ns3">http://www.w3.org/2001/XMLSchema</xsl:attribute>
>                       <xsl:value-of select="."/>
>                   </xsl:element>
>
>
> as
>
> <calypso:value xsi:type="ns3:string"
>               xmlns:ns3="http://www.w3.org/2001/XMLSchema"
>>
>   <xsl:value-of select="."/>
> </calypso:value>
>
> Michael Kay
> Saxonica
>
> On 09/11/2010 15:59, Nick Leaton wrote:
>>
>> I thought I had a solution to my namespace problem, but on
>> investigation I haven't
>> On further investigation, I haven't got it going, so I've produced a
>> cut down version
>> showing the problem
>>
>> here is a test xml file
>>
>> ===================
>> <?xml version="1.0" encoding="UTF-8"?>
>> <bonds>
>>    <isin>123</isin>
>>    <isin>456</isin>
>>    <isin>789</isin>
>> </bonds>
>> ===================
>>
>>
>> Here is the xslt cut down
>> ===================
>> <?xml version="1.0" encoding="UTF-8"?>
>> <xsl:stylesheet
>>    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
>>    xmlns:calypso="http://www.calypso.com/xml"
>>    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>    version="2.0">
>>
>>    <xsl:output method="xml" indent="yes"/>
>>
>>    <xsl:template match="/">
>>        <bonds>
>>            <xsl:for-each select="//isin">
>>            <bond>
>>                <calypso:secCode>
>>                    <calypso:name>ISIN</calypso:name>
>>                    <xsl:element name="calypso:value">
>>                        <xsl:attribute
>> name="xsi:type">ns3:string</xsl:attribute>
>>                        <xsl:attribute
>> name="ns3">http://www.w3.org/2001/XMLSchema</xsl:attribute>
>>                        <xsl:value-of select="."/>
>>                    </xsl:element>
>>                </calypso:secCode>
>>            </bond>
>>        </xsl:for-each>
>>        </bonds>
>>    </xsl:template>
>> </xsl:stylesheet>
>>
>> ===================
>>
>> Here is the output
>>
>> ===================
>> <?xml version="1.0" encoding="UTF-8"?>
>> <bonds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>       xmlns:calypso="http://www.calypso.com/xml">
>>   <bond>
>>      <calypso:secCode>
>>         <calypso:name>ISIN</calypso:name>
>>         <calypso:value xsi:type="ns3:string"
>> ns3="http://www.w3.org/2001/XMLSchema">123</calypso:value>
>>      </calypso:secCode>
>>   </bond>
>>   <bond>
>>      <calypso:secCode>
>>         <calypso:name>ISIN</calypso:name>
>>         <calypso:value xsi:type="ns3:string"
>> ns3="http://www.w3.org/2001/XMLSchema">456</calypso:value>
>>      </calypso:secCode>
>>   </bond>
>>   <bond>
>>      <calypso:secCode>
>>         <calypso:name>ISIN</calypso:name>
>>         <calypso:value xsi:type="ns3:string"
>> ns3="http://www.w3.org/2001/XMLSchema">789</calypso:value>
>>      </calypso:secCode>
>>   </bond>
>> </bonds>
>> ===================
>>
>> Here is the desired output
>>
>> ===================
>> <?xml version="1.0" encoding="UTF-8"?>
>> <bonds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>>       xmlns:calypso="http://www.calypso.com/xml">
>>   <bond>
>>      <calypso:secCode>
>>         <calypso:name>ISIN</calypso:name>
>>         <calypso:value xsi:type="ns3:string"
>> xmlns:ns3="http://www.w3.org/2001/XMLSchema">123</calypso:value>
>>      </calypso:secCode>
>>   </bond>
>>   <bond>
>>      <calypso:secCode>
>>         <calypso:name>ISIN</calypso:name>
>>         <calypso:value xsi:type="ns3:string"
>> xmlns:ns3="http://www.w3.org/2001/XMLSchema">456</calypso:value>
>>      </calypso:secCode>
>>   </bond>
>>   <bond>
>>      <calypso:secCode>
>>         <calypso:name>ISIN</calypso:name>
>>         <calypso:value xsi:type="ns3:string"
>> xmlns:ns3="http://www.w3.org/2001/XMLSchema">789</calypso:value>
>>      </calypso:secCode>
>>   </bond>
>> </bonds>
>> ===================
>>
>>
>> The difference is that I need
>>
>> ns3="http://www.w3.org/2001/XMLSchema"
>>
>> output as
>>
>> xmlns:ns3="http://www.w3.org/2001/XMLSchema"
>>
>>
>> Any ideas?
>> --
>> Nick
>
>



--
Nick


Current Thread
Keywords