Как я могу преобразовать xml из услуг axis2, используя jQuery и AJAX? - PullRequest
1 голос
/ 18 марта 2009

У меня проблема с axis2 и ajax. Я получаю xml от одного из моих веб-сервисов с помощью jjuery-функций ajax и использую этот плагин jquery для преобразования результата xml в html.

Вот пример соответствующего xml, который возвращает служба.

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

Я просмотрел объект xml Document, полученный от вызова jjuery ajax, и он, похоже, удалил пространства имен из тегов и сделал все теги строчными. Однако я не могу заставить свои шаблоны xsl распознавать какие-либо теги.

Вот что у меня сейчас есть в 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>

Лучшее, что я могу получить - это опция success1. Я нашел некоторую информацию здесь о том, как заставить ax2 играть лучше с ajax, но похоже, что это может испортить клиентов службы Java, которые у меня есть.

Вот этот javascript.

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

Итак, я делаю что-то глупое или есть лучший способ сделать это? Спасибо за любую помощь.

1 Ответ

1 голос
/ 18 марта 2009

Вы говорите, что думаете, что пространства имен исчезли, но я думаю, что это не так. Почему они должны?

Попробуйте преобразование, которое игнорирует пространства имен, например:

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

или шаблон, который использует их правильно, например:

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