Pergunta

Eu estou correndo em um problema com axis2 e ajax. Estou ficando xml de um dos meus serviços web com funções de ajax do jQuery e usando este jquery Plugin para transformar o xml resultado para html.

Aqui está um exemplo do xml relevante que o serviço retorna.

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

Eu olhei através do objeto documento XML que eu recebo da chamada ajax jQuery, e parece ter tirado os espaços de nomes de tags e fez as tags todas as letras minúsculas. No entanto, eu não consigo colocar meus modelos XSL para reconhecer qualquer uma das marcas.

Aqui está o que eu tenho agora no 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>

O melhor que pode obter é a opção success1. Eu encontrei algumas informações aqui sobre fazer jogo eixo2 mais agradável com ajax, mas que parece que pode estragar os clientes do serviço java eu ??tenho.

Aqui está o javascript em questão.

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

Assim que eu estou fazendo algo estúpido ou se existe uma maneira melhor de fazer isso? Obrigado por qualquer ajuda.

Foi útil?

Solução

Você diz que você acha que namespaces são idos, mas acho que eles não são. Por que deveriam?

Tente uma transformação que ignora namespaces, 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>

ou um modelo que usa-los corretamente, 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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top