Re: [xsl] How to take a QName value and make it an attribute?

Subject: Re: [xsl] How to take a QName value and make it an attribute?
From: Andrew Welch <andrew.j.welch@xxxxxxxxx>
Date: Wed, 1 Aug 2012 16:42:22 +0100
On 1 August 2012 16:24, Costello, Roger L. <costello@xxxxxxxxx> wrote:
> Hi Folks,
>
> I want to transform the <fault> element in this document:
>
> <Test xmlns:soap="http://www.soap.org";>
>     <fault>soap:client</fault>
> </Test>
>
> Note that the value of the <fault> element is
>
>     soap:client
>
> which is a QName.
>
> I want to transform the <fault> element to this:
>
>     <fault soap:client="blah">soap:client</fault>
>
> That is, make the QName value an attribute and assign it the string "blah."
>
> After transformation the XML document is to be this:
>
> <Test xmlns:soap="http://www.soap.org";>
>     <fault soap:client="blah">soap:client</fault>
> </Test>
>
> I tried this code:
>
>     <xsl:template match="fault">
>         <xsl:copy>
>             <xsl:variable name="QName" select="." />
>             <xsl:attribute name="{$QName}">blah</xsl:attribute>
>             <xsl:value-of select="." />
>         </xsl:copy>
>     </xsl:template>
>
> But it produces this error message:
>
>     Undeclared prefix in attribute name: soap
>
> What is the proper way to accomplish the desired transformation please?

You can:

- declare the soap namespace on your stylesheet element and your code
will work as it is

or

- add the 'namespace' attribute to xsl:attribute and hard code the
soap namespace in there

or

- add the 'namespace' attribute to xsl:attribute and get the soap
namespace from the source using the various namespace related
functions


-- 
Andrew Welch
http://andrewjwelch.com

Current Thread