Comment transformer des fichiers XML à partir de services axis2 à l'aide de jQuery et AJAX?
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.
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>