كيف يمكنني تحويل XML من خدمات axis2 باستخدام مسج و AJAX؟
سؤال
وأنا على التوالي في مشكلة مع axis2 واياكس. انني اتلقى أكس من واحدة من الخدمات الويب الخاص بي مع وظائف اياكس مسج ل، واستخدام هذا مسج البرنامج المساعد لتحويل أكس نتيجة إلى HTML.
وهنا مثال من أكس ذات الصلة التي تقوم بإرجاع خدمة.
<ns:getPatientsByDoctorResponse>
<ns:return type="com.emolst.jdbc.PatientBean">
<ax23:firstName>Bryce</ax23:firstName>
<ax23:lastName>Thompson</ax23:lastName>
</ns:return>
</ns:getPatientsByDoctorResponse>
ونظرت من خلال الكائن مستند XML أن أحصل من استدعاء أياكس مسج، ويبدو أنها قد جردت مساحات من العلامات وجعل علامات كل صغيرة. ومع ذلك، وأنا لا يمكن أن يبدو للحصول على بلدي قوالب 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. لقد وجدت بعض المعلومات هنا عن جعل axis2 اللعب أجمل مع اياكس، ولكن الذي يبدو أنه قد المسمار خدمة العملاء جافا لدي.
وهنا جافا سكريبت في المسألة.
$("select[name=patientlist]").transform({
xml:{
url:"/axis2/services/PatientService/getPatientsByDoctor",
data {
docKey: "6"
},
type:"GET",
dataType:"xml"
},
xsl:"xsl/patients-option.xsl"
});
وهكذا أفعل شيء غبي أم أن هناك طريقة أفضل للقيام بذلك؟ شكرا على اي مساعدة.
المحلول
وكنت أقول إن كنت تعتقد ولت النطاقات، ولكن أعتقد أنها ليست كذلك. لماذا يفعلون ذلك؟
وحاول التحول الذي يتجاهل النطاقات، مثل هذا:
<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>