xsl-list
[Top] [All Lists]

Re: Pulling out my hair: XSLT and XML with namespace

2003-05-06 18:36:48
I hope I'm not repeating a post of another message in this list, but I've
looked everywhere on the net with both Google and Altavista, and cannot
figure out what is wrong with my XPath/XSLT parsing.

Given the following XML file:

<?xml version="1.0"?>
<definitions name="TemperatureService"
targetNamespace="http://www.xmethods.net/sd/TemperatureService.wsdl";
xmlns:tns="http://www.xmethods.net/sd/TemperatureService.wsdl";
xmlns:xsd="http://www.w3.org/1999/XMLSchema";
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
xmlns="http://schemas.xmlsoap.org/wsdl/";>
        <service name="TemperatureService">
                <documentation>Returns current temperature in a given U.S.
zipcode  </documentation>
                <port name="TemperaturePort"
binding="tns:TemperatureBinding">
                        <soap:address
location="http://services.xmethods.net:80/soap/servlet/rpcrouter"/>
                </port>
        </service>
</definitions>

and the following XSLT snippet:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="html"/>
<xsl:template match="/">

<xsl:for-each select="definitions/service/port">
POST Path = <xsl:value-of select="soap:address/@location"/>
</xsl:for-each>

I get the following result:

(BLANK DOCUMENT)
You are really close (dont pull your hair out - trust me you'll want ot
keep it for as long as possible)

The problem is the xml document has a default name space
...xmlns="http://schemas.xmlsoap.org/wsdl/";>

Which (in a sense) means that <definitions> really is
<{http://schemas.xmlsoap.org/wsdl/}definitions> (for give me if my
syntax is wrong.

What you can do is reference that name space in the xslt like so:

<?xml version="1.0" encoding="utf-8"?>

<xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
        xmlns:booga="http://schemas.xmlsoap.org/wsdl/";

<xsl:output method="html"/>

<xsl:template match="/">
        <xsl:for-each select="booga:definitions/booga:service/booga:port">
        POST Path = <xsl:value-of select="soap:address/@location"/>
        </xsl:for-each>
</xsl:template>

</xsl:stylesheet>

and that should yield

POST Path = http://services.xmethods.net:80/soap/servlet/rpcrouter

do you see why? repost if you dont.

Cheers,
Rob
-- 
    _/  _/_/    _/_/_/
   _/_/   _/ _/     _/
  _/               _/
 _/             _/
_/          _/_/_/_/
http://treebeard.sourceforge.net
http://ashpool.sourceforge.net


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>