Domanda

Sto riscontrando un problema con axis2 e ajax. Ricevo XML da uno dei miei servizi Web con le funzioni ajax di jQuery e utilizzo this jquery plugin per trasformare il risultato xml in html.

Ecco un esempio dell'xml pertinente restituito dal servizio.

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

Ho guardato attraverso l'oggetto Document XML che ottengo dalla chiamata ajax jQuery, e sembra che abbia rimosso gli spazi dei nomi dai tag e li abbia resi tutti minuscoli. Tuttavia, non riesco a convincere i miei modelli xsl a riconoscere nessuno dei tag.

Ecco cosa ho ora in 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>

Il meglio che posso ottenere è l'opzione success1. Ho trovato alcune informazioni qui su come rendere axis2 più piacevole con ajax, ma sembra che potrebbe rovinare i client di servizio Java che ho.

Ecco il javascript in questione.

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

Quindi sto facendo qualcosa di stupido o c'è un modo migliore per farlo? Grazie per l'aiuto.

È stato utile?

Soluzione

Dici che pensi che gli spazi dei nomi siano spariti, ma penso che non lo siano. Perché dovrebbero?

Prova una trasformazione che ignora gli spazi dei nomi, in questo modo:

<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>

o un modello che li utilizza correttamente, in questo modo:

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top