Avatar billede spif Nybegynder
26. januar 2005 - 21:59 Der er 12 kommentarer og
1 løsning

XPath og default namespaces

Hej xpath eksperter!

Har følgende XML fra en webservice response:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <getProductsResponse xmlns="http://microsoft.com/webservices/">
            <getProductsResult>
                            <name>test</name>
            </getProductsResult>
        </getProductsResponse>
    </soap:Body>
</soap:Envelope>

Har følgende XSLT stylesheet:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>   
    <xsl:template match="//getProductsResult">
            <xsl:value-of select="./name"/>
    </xsl:template>
</xsl:stylesheet>


Jeg har problemer med at få xpath expression: //getProductsResult til at returnere noget. Jeg går ud fra det er på grund af default namespacet 'http://microsoft.com/webservices/'.
Hvordan får jeg det til at virke? Jeg kun mulighed for at ændre i XSLT stylesheet.


Tak
Avatar billede arne_v Ekspert
26. januar 2005 - 22:08 #1
Jeg kan ikke gennemskue namespace problemet.

Men vil du selv parse SOAP responsen uden brug af et web service toolkit ?
Avatar billede spif Nybegynder
26. januar 2005 - 22:44 #2
ja, og jeg kan godt få det til at virke hvis jeg fjerner default namespace, men som sagt har jeg ikke lov til at ændre i SOAP response. Hvilket toolkit tænker du på?
Avatar billede arne_v Ekspert
26. januar 2005 - 22:49 #3
Hvad programmerer du i ?
Avatar billede spif Nybegynder
26. januar 2005 - 22:50 #4
Java
Avatar billede arne_v Ekspert
26. januar 2005 - 22:52 #5
Så vil jeg da anbefale Apache Axis
Avatar billede spif Nybegynder
26. januar 2005 - 23:22 #6
Jo tak det bruger jeg allerede, men det er nu mere Java2WSDL og WSDL2Java jeg bruger det til. Jeg kan ikke se hvordan Apache Axis løser mit nuværende problem...
Avatar billede arne_v Ekspert
27. januar 2005 - 08:23 #7
Normalt vil man kunne kalde noget i den genererede Java kode og få Java data
typer tilbage uden at man selv skal parse response.
Avatar billede atoft Nybegynder
27. januar 2005 - 08:34 #8
Har du prøvet at filføje
xmlns="http://microsoft.com/webservices/" som namespace i dit XLST?

altså

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://microsoft.com/webservices/">
    <xsl:output method="xml" version="1.0" encoding="ISO-8859-1" indent="yes"/>   
    <xsl:template match="//getProductsResult">
            <xsl:value-of select="./name"/>
    </xsl:template>
</xsl:stylesheet>

alternativ kan du prøve at nærlæse her http://sources.redhat.com/ml/xsl-list/2001-12/msg00526.html
Avatar billede spif Nybegynder
27. januar 2005 - 09:55 #9
Yes nu virker det, men jeg blev nødt til at tilføje namespace: xmlns:ws="http://microsoft.com/webservices/" og derefter rette alle xpath expressions så de bruger namespacet //getProductsResult -> //ws:getProductsResult. Det ville være godt
hvis man ikke behøvede at bruge prefix i alle xpath expressions, men det kan jeg ikke få den til.
Anyway atoft så skal du da have dine point, så skriv lige et svar så du kan få dem :-)
Avatar billede janegil Nybegynder
27. januar 2005 - 09:56 #10
Jeg har ikke giddet å sette meg inn i problemet ditt, men overskriften "XPath og default namespaces" minner om et problem jeg hadde med XSLT og default namespace.

Den gan ble jeg nød til å deklarere et eksplistit namespce i XSLT, for å matche et implisitt namespace i XML-sourcen.

Hvis du har samme problemet, skal du altså deklarere fx
xmlns:ws="http://microsoft.com/webservices/"
i XSLT, og bruke
template match="//ws:getProductsResult"

Og du kan godt fortsette med default namespce i kilden, default getProductsResult matcher eksplisitt ws:getProductsResult.
Avatar billede spif Nybegynder
27. januar 2005 - 10:01 #11
Tak for hjælpen janegil, men desværre kom du lidt for sent :-(
Avatar billede janegil Nybegynder
27. januar 2005 - 10:13 #12
Skulle ikke undre meg om det var atoft som fant løsningen for meg i sin tid, så det er helt OK. (Det er uansett ikke min egen løsning, selv er jeg litt for dogmatisk til å finne denslags.)
Avatar billede atoft Nybegynder
27. januar 2005 - 10:16 #13
Så smider jeg da lige et svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester