My reading of Dave's response was that in Xalan-C the namespace axis does
return all in-scope namespaces, but that you cannot reliably obtain the
parent element of a namespace node. So rather than accessing the parent of
the namespace node using the parent axis, you need to save it (the parent
element) in a variable. Is that correct?
Michael Kay
-----Original Message-----
From: Marc Schneider [mailto:mschneider(_at_)opnet(_dot_)com]
Sent: 13 September 2004 22:36
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: Re: [xsl] Namespace problem
Dave -
Since WSDL files have QName in attributes, the namespace
prefix in the
attribute can be any in-scope namespace. This deviation from
the XPath data
model makes it very difficult to process WSDL files.
Marc
At 04:27 PM 9/13/2004, you wrote:
Hello -
I may have spoken too soon when I said that using
current() did the
trick.
This apparently works in XalanJ, but XalanC v1.7 appears to have a
problem
with namespace::* and doesn't evaluate
namespace::*[starts-with(name(),
substring-before(current()/parent::node()/@name,':'))] correctly.
Unfortunately, I need to support XalanC v1.7, does anyone
know of a way
to
resolve a namespace URI from the prefix in XalanC 1.7?
This is a case where Xalan-C deviates from the XPath data
model, and does
not have a namespace node for every in-scope namespace on
every element.
The following stylesheet produces the desired result:
<?xml version="1.0"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
version="1.0">
<xsl:output encoding="utf-8" />
<xsl:template match="wsdl:operation">
<xsl:element name="operation">
<xsl:choose>
<xsl:when test="contains(parent::node()/@name,':')">
<xsl:variable name="ns"
select="substring-before(parent::node()/@name, ':')" />
<xsl:attribute name="portType_nspc">
<xsl:choose>
<xsl:when test="contains(parent::node()/@name,':')">
<xsl:value-of select="namespace::*[name() = $ns]"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="ancestor::*[last()]/@targetNamespace"/>
</xsl:otherwise>
</xsl:choose>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
<xsl:attribute name="portType_nspc"/>
</xsl:otherwise>
</xsl:choose>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
I've been tempted numerous times to fix this deviation, but the cases
where this has caused a problem have been extremely rare,
and the cost in
memory overhead is considerable in many cases.
Dave
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--
--+------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--+--