[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
With source doc:
I tried the following stylesheet:
<xsl:output method="text" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="res0" select="resolve-QName($chap/@att-one, $doc)"/>
{<xsl:value-of select="namespace-uri-from-QName($res0)"/>}<xsl:value-of select="local-name-from-QName($res0)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res1" select="resolve-QName($chap/@att-one, $chap)"/>
{<xsl:value-of select="namespace-uri-from-QName($res1)"/>}<xsl:value-of select="local-name-from-QName($res1)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res2" select="resolve-QName(string($data1), $data1)"/>
{<xsl:value-of select="namespace-uri-from-QName($res2)"/>}<xsl:value-of select="local-name-from-QName($res2)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res3" select="resolve-QName(string($data2), $data2)"/>
{<xsl:value-of select="namespace-uri-from-QName($res3)"/>}<xsl:value-of select="local-name-from-QName($res3)"/><xsl:text>#xa;</xsl:text>
</xsl:template>
</xsl:stylesheet>
{}text
{one.uri}value
{}value
I don't understand why resolve-QName($chap/@att-one, $doc) doesn't resolve 'value' to {one.uri}value when $doc is used for the resolving node as it has 'one' mapped to 'one.uri'.
then I tried adding xpath-default-namespace="default-uri" and removing the def: prefix from the variables declarations and the stylesheet namespace declaration. This led to an error indicating that $chap/@att-one was an empty sequence. I presume this is something to do with the default namespace being undeclared. The full stylesheet:
<xsl:output method="text" indent="yes"/>
<xsl:template match="/">
<xsl:variable name="res0" select="resolve-QName($chap/@att-one, $doc)"/>
{<xsl:value-of select="namespace-uri-from-QName($res0)"/>}<xsl:value-of select="local-name-from-QName($res0)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res1" select="resolve-QName($chap/@att-one, $chap)"/>
{<xsl:value-of select="namespace-uri-from-QName($res1)"/>}<xsl:value-of select="local-name-from-QName($res1)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res2" select="resolve-QName(string($data1), $data1)"/>
{<xsl:value-of select="namespace-uri-from-QName($res2)"/>}<xsl:value-of select="local-name-from-QName($res2)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res3" select="resolve-QName(string($data2), $data2)"/>
{<xsl:value-of select="namespace-uri-from-QName($res3)"/>}<xsl:value-of select="local-name-from-QName($res3)"/><xsl:text>#xa;</xsl:text>
</xsl:template>
</xsl:stylesheet>
This didn't work either, does that mean once I have used the xpath-default-namespace I can't select this sort of element (no namespace)?
I am using Saxon 8 basic.
--
Joe
PS (to Michael Kay - I tried posting to Saxon list at SourceForge but was not able to subscribe as I never received a confirmation email)
[xsl] resolveQName and xpath-default-namespace
Subject: [xsl] resolveQName and xpath-default-namespace From: "Joe Fawcett" <joefawcett@xxxxxxxxxxx> Date: Wed, 29 Sep 2004 09:50:07 +0100 |
With source doc:
<doc xmlns:one="one.uri" xmlns="default.uri"> <chap xmlns="" att-one="text"> <data-one>one:value</data-one> <data-two>value</data-two> </chap> </doc>
I tried the following stylesheet:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:one="one.uri" xmlns:def="default.uri">
<xsl:output method="text" indent="yes"/>
<xsl:variable name="doc" select="/def:doc"/> <xsl:variable name="chap" select="/def:doc/chap"/> <xsl:variable name="data1" select="/def:doc/chap/data-one"/> <xsl:variable name="data2" select="/def:doc/chap/data-two"/>
<xsl:template match="/">
<xsl:variable name="res0" select="resolve-QName($chap/@att-one, $doc)"/>
{<xsl:value-of select="namespace-uri-from-QName($res0)"/>}<xsl:value-of select="local-name-from-QName($res0)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res1" select="resolve-QName($chap/@att-one, $chap)"/>
{<xsl:value-of select="namespace-uri-from-QName($res1)"/>}<xsl:value-of select="local-name-from-QName($res1)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res2" select="resolve-QName(string($data1), $data1)"/>
{<xsl:value-of select="namespace-uri-from-QName($res2)"/>}<xsl:value-of select="local-name-from-QName($res2)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res3" select="resolve-QName(string($data2), $data2)"/>
{<xsl:value-of select="namespace-uri-from-QName($res3)"/>}<xsl:value-of select="local-name-from-QName($res3)"/><xsl:text>#xa;</xsl:text>
</xsl:template>
</xsl:stylesheet>
against the doc shown above. I get: {}text
{}text
{one.uri}value
{}value
I don't understand why resolve-QName($chap/@att-one, $doc) doesn't resolve 'value' to {one.uri}value when $doc is used for the resolving node as it has 'one' mapped to 'one.uri'.
then I tried adding xpath-default-namespace="default-uri" and removing the def: prefix from the variables declarations and the stylesheet namespace declaration. This led to an error indicating that $chap/@att-one was an empty sequence. I presume this is something to do with the default namespace being undeclared. The full stylesheet:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:one="one.uri" xpath-default-namespace="default.uri">
<xsl:output method="text" indent="yes"/>
<xsl:variable name="doc" select="/doc"/> <xsl:variable name="chap" select="/doc/chap"/> <xsl:variable name="data1" select="/doc/chap/data-one"/> <xsl:variable name="data2" select="/doc/chap/data-two"/>
<xsl:template match="/">
<xsl:variable name="res0" select="resolve-QName($chap/@att-one, $doc)"/>
{<xsl:value-of select="namespace-uri-from-QName($res0)"/>}<xsl:value-of select="local-name-from-QName($res0)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res1" select="resolve-QName($chap/@att-one, $chap)"/>
{<xsl:value-of select="namespace-uri-from-QName($res1)"/>}<xsl:value-of select="local-name-from-QName($res1)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res2" select="resolve-QName(string($data1), $data1)"/>
{<xsl:value-of select="namespace-uri-from-QName($res2)"/>}<xsl:value-of select="local-name-from-QName($res2)"/><xsl:text>#xa;</xsl:text>
<xsl:variable name="res3" select="resolve-QName(string($data2), $data2)"/>
{<xsl:value-of select="namespace-uri-from-QName($res3)"/>}<xsl:value-of select="local-name-from-QName($res3)"/><xsl:text>#xa;</xsl:text>
</xsl:template>
</xsl:stylesheet>
This didn't work either, does that mean once I have used the xpath-default-namespace I can't select this sort of element (no namespace)?
I am using Saxon 8 basic.
--
Joe
PS (to Michael Kay - I tried posting to Saxon list at SourceForge but was not able to subscribe as I never received a confirmation email)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] How to: Reference to the , Michael Kay | Thread | RE: [xsl] resolveQName and xpath-de, Michael Kay |
[xsl] How to: Reference to the curr, news | Date | RE: [xsl] How to: Reference to the , Michael Kay |
Month |