Pregunta

Me encuentro con un problema con axis2 y ajax. Estoy obteniendo xml de uno de mis servicios web con las funciones ajax de jQuery, y estoy usando this jquery plugin para transformar el resultado xml a html.

Aquí hay un ejemplo del xml relevante que devuelve el servicio.

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

Miré a través del objeto de documento xml que recibí de la llamada jQuery ajax, y parece que eliminó los espacios de nombres de las etiquetas y las hizo todas en minúsculas. Sin embargo, parece que no puedo hacer que mis plantillas xsl reconozcan ninguna de las etiquetas.

Esto es lo que tengo ahora en el 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>

Lo mejor que puedo obtener es la opción success1. Encontré información aquí sobre cómo hacer que axis2 juegue mejor con ajax, pero parece que podría arruinar los clientes de servicio de Java que tengo.

Aquí está el javascript en cuestión.

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

Entonces, ¿estoy haciendo algo estúpido o hay una mejor manera de hacerlo? Gracias por cualquier ayuda.

¿Fue útil?

Solución

Dices que crees que los espacios de nombres se han ido, pero creo que no. ¿Por qué deberían hacerlo?

Pruebe una transformación que ignore los espacios de nombres, como este:

<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 una plantilla que los usa correctamente, como esta:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top