Comment transformer des fichiers XML à partir de services axis2 à l'aide de jQuery et AJAX?

StackOverflow https://stackoverflow.com/questions/656459

Question

Je rencontre un problème avec axis2 et ajax. Je reçois le xml d'un de mes services Web avec les fonctions ajax de jQuery, et j'utilise this jquery plugin pour transformer le résultat XML en HTML.

Voici un exemple de xml pertinent renvoyé par le service.

<ns:getPatientsByDoctorResponse>
    <ns:return type="com.emolst.jdbc.PatientBean">
        <ax23:firstName>Bryce</ax23:firstName>
        <ax23:lastName>Thompson</ax23:lastName>
    </ns:return>
</ns:getPatientsByDoctorResponse>

J'ai examiné l'objet Document xml que je tire de l'appel jQuery ajax et il semble avoir supprimé les espaces de noms des balises et les a toutes mises en minuscules. Cependant, je ne parviens pas à faire reconnaître mes tags à mes modèles xsl.

Voici ce que j'ai maintenant dans le fichier xsl.

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:transform version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
        <option>success1</option>
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="//return">
        <option>success2</option>
        <option>
            <xsl:value-of select="firstname"/> <xsl:value-of select="lastname"/>
        </option>
    </xsl:template>
</xsl:transform>

Le meilleur que je puisse obtenir est l'option success1. J'ai trouvé des informations ici sur la possibilité de rendre Axe2 plus agréable avec Ajax, mais cela semble être le cas. bousiller les clients du service java que j'ai.

Voici le javascript en question.

$("select[name=patientlist]").transform({
    xml:{
        url:"/axis2/services/PatientService/getPatientsByDoctor",
        data {
            docKey: "6"
        },
        type:"GET",
        dataType:"xml"
    },
    xsl:"xsl/patients-option.xsl"
});

Alors, est-ce que je fais quelque chose de stupide ou existe-t-il une meilleure façon de le faire? Merci pour toute aide.

Était-ce utile?

La solution

Vous dites que vous pensez que les espaces de noms ont disparu, mais je pense qu'ils ne le sont pas. Pourquoi devraient-ils?

Essayez une transformation qui ignore les espaces de noms, comme ceci:

<xsl:transform 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
        <option>success1</option>
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="//*[local-name()='return']">
        <option>success2</option>
        <option>
            <xsl:value-of select="*[local-name()='firstname']"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="*[local-name()='lastname']"/>
        </option>
    </xsl:template>

</xsl:transform>

ou un modèle qui les utilise correctement, comme ceci:

<xsl:transform 
  version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:ax23="........ax23 namespace here........"
  xmlns:ns="........ns namespace here........"
>

    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
        <option>success1</option>
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="ns:return">
        <option>success2</option>
        <option>
            <xsl:value-of select="ax23:firstname"/>
            <xsl:text> </xsl:text>
            <xsl:value-of select="ax23:lastname"/>
        </option>
    </xsl:template>

</xsl:transform>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top