Subject: [xsl] Literal result element namespace differs from xsl:element namespa ce From: "Jones, Rick" <rick.jones@xxxxxxxx> Date: Wed, 17 Dec 2003 16:59:10 -0000 |
I'm getting a problem with namespaces, where the output document needs to change its namespace in the middle. Saxon works OK, but libxslt behaves differently. Here's a highly simplified example - the intended output is: <?xml version="1.0"?> <Message xmlns="http://me.envelope"> <Header> <Title>My document</Title> <From>someone</From> </Header <Body xmlns="http://me.content"> <Item> <Ref>1234</Ref> <Info desc="A widget"> <Note>min qty 5</Note> </Info> <Quantity>10</Quantity> </Item> <!-- etc. --> </Message> note the change in namespace (fictitious URIs for simplicity) Source is: <?xml version="1.0"?> <report> <title>My Document</title> <origin>someone</origin> <form> <code>1234</code> <description note="min qty 5">A widget</description> <qty>10</qty> </form> <form> <code>99999</code> <description note="add comment">Miscellaneous</description> <qty>3</qty> </form> </report> And stylesheet is: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://me.envelope" version="1.0"> <xsl:output method="xml" indent="yes"/> <xsl:template match="report"> <Message> <Header> <Title><xsl:value-of select="title"/></Title> <From><xsl:value-of select="origin"/></From> </Header> <Body xmlns="http://me.content"> <xsl:for-each select="form"> <Item> <Ref><xsl:value-of select="code"/></Ref> <xsl:element name="Info"> <xsl:attribute name="desc"> <xsl:value-of select="description"/> </xsl:attribute> <Note><xsl:value-of select="description/@note"/></Note> </xsl:element> <Quantity><xsl:value-of select="qty"/></Quantity> </Item> </xsl:for-each> </Body> </Message> </xsl:template> </xsl:stylesheet> But using libxslt (in fact xsltproc) this produces: <?xml version="1.0"?> <Message xmlns="http://me.envelope"> <Header> <Title>My Document</Title> <From>someone</From> </Header> <Body xmlns="http://me.content"> <Item xmlns="http://me.envelope"> <Ref>1234</Ref> <Info xmlns="http://me.content" desc="A widget"> <Note xmlns="http://me.envelope">min qty 5</Note> </Info> <Quantity>10</Quantity> </Item> <Item xmlns="http://me.envelope"> <Ref>99999</Ref> <Info xmlns="http://me.content" desc="Miscellaneous"> <Note xmlns="http://me.envelope">add comment</Note> </Info> <Quantity>3</Quantity> </Item> </Body> </Message> note all the xmlns attributes ! It seems to assume that literal result elements in the style sheet that are children of Body belong to the top-level default namespace, not the namespace declared on Body. It thus switches namespace in the output. However, elements created by xsl:element are assumed to belong to the inner namespace. With a mixture of both methods of creating elements, the output contains a mass of namespace changes (all wrong). The real application is vastly more complex than this, and I'm hoping to be able to use xsltproc (or a custom app using libxslt) without having to resort to major reconstruction of the stylesheet (the only way I can see to fix it so far is to add explicit namespaces to every element in the stylesheet :( ) It strikes me as inconsistent, but I can't find anything explicit in the books or docs. that says how this should work. Is Saxon and MSXML wrong, or is libxslt - or is it "undefined"? Comments and suggestions much appreciated TIA Rick Jones -------------------------------------------------------------------------------------------- The statements and opinions expressed here are my own and may not represent those of the company. This e-mail is subject to copyright and the information in it is confidential. It is intended only for the named recipient. You are advised not to disclose the contents of this e-mail to another person or take copies of it. --------------------------------------------------------------------------------------------- XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Building html links in xm, Jackson Zettler | Thread | Re: [xsl] Literal result element na, David Carlisle |
Re: [xsl] Complex (i think) xpath m, Wendell Piez | Date | Re: [xsl] Building html links in xm, David Carlisle |
Month |