سؤال

تحرير: كنت في عداد المفقودين اثنين من الأشياء هنا.عدم وجود "Content-Type:text/xml" في رأس إرجاعها من قبل اياكس الاتصال منع مسج من معالجة البيانات التي تم إرجاعها كوثيقة.بمجرد أن تم التعامل معها بشكل صحيح ، هذا الرمز تحليل بشكل صحيح و الإخراج مجرد مؤشر اسم المشروع.

$("a.getprojects").click(function(d){
  d.preventDefault();
  var api_token = $("#token").val();
  var form_fbod = $("#fbod").val();
  $.post("fbinfo.php", {fbod: form_fbod, token: api_token, cmd : 'listProjects', extra:''}, function(returned_xml) {
    var output = '';
    $(returned_xml).find("project").each(function(){
      var project = $(this);
      output += project.find("ixProject").text();
      output += " ";
      output += project.find("sProject").text();
      output += "\n";
    });
    $("#output").val(output);
  });
});

الأصلي:أنا يلهون باستخدام FogBugz API و مسج لوضع معا ما أعتقد سوف يكون بارد قليلا أداة, ولكن أنا على التوالي في مسج القيد.CDATA العلامات يبدو أن تخلط بين ذلك.

هنا مدونة أنا باستخدام:

  $("a.getprojects").click(function(d){
    d.preventDefault();
    var api_token = $("#token").val();
    var form_fbod = $("#fbod").val();
    $.post("fbinfo.php", {fbod: form_fbod, token: api_token, cmd : 'listProjects', extra:''}, function(xml) {
      var output = xml;
      $(xml).find("project").each(function(){
        var project = $(this);
        output += "\n\n";

        output += project.html();

      });
      $("#output").val(output);

    });
  });

و هنا 's الإخراج أحصل على:

<?xml version="1.0" encoding="UTF-8"?><response>
    <projects>
<project>
<ixProject>2</ixProject>
<sProject><![CDATA[Inbox]]></sProject>
<ixPersonOwner>2</ixPersonOwner>
<sPersonOwner><![CDATA[Rich]]></sPersonOwner>
<sEmail><![CDATA[rich@example.com]]></sEmail>
<sPhone></sPhone>
<fInbox>true</fInbox>
<ixGroup>1</ixGroup>
<iType>1</iType>
<sGroup><![CDATA[Internal]]></sGroup>
</project>

<project>
<ixProject>1</ixProject>
<sProject><![CDATA[Sample Project]]></sProject>
<ixPersonOwner>2</ixPersonOwner>
<sPersonOwner><![CDATA[Rich]]></sPersonOwner>
<sEmail><![CDATA[rich@example.com]]></sEmail>
<sPhone></sPhone>
<fInbox>false</fInbox>
<ixGroup>1</ixGroup>
<iType>1</iType>
<sGroup><![CDATA[Internal]]></sGroup>
</project>
</projects>
</response>

<ixproject>2</ixproject>
<sproject></sproject>
<ixpersonowner>2</ixpersonowner>
<spersonowner></spersonowner>
<semail></semail>
<sphone></sphone>
<finbox>true</finbox>
<ixgroup>1</ixgroup>
<itype>1</itype>
<sgroup></sgroup>

<ixproject>1</ixproject>
<sproject></sproject>
<ixpersonowner>2</ixpersonowner>
<spersonowner></spersonowner>
<semail></semail>
<sphone></sphone>
<finbox>false</finbox>
<ixgroup>1</ixgroup>
<itype>1</itype>
<sgroup></sgroup>

ويبدو أن تحليل XML أن الأم إلى مسج يتجاهل محتويات CDATA العناصر.FogBugz يضع أكثر من سلسلة البيانات في CDATA الكلمات لأننا تسمح الخاصة الأحرف وعلامات الترقيم في معظم الأماكن.أرفق الإخراج في CDATA العلامات يسمح لنا بقية نسبيا أكد أننا بإرسال بيانات صحيحة عن طريق API لدينا.PHP تحليل XML يعمل على ما يرام.بحثي على الانترنت ينتج عدد قليل من الناس يشكون من هذا, ولكن ليس الكثير من العمل الحصول على القيام به.مع مسج هذا التمدد ، وأعتقد أن هناك شيء هناك.وقد أي شخص آخر إنجاز هذا ؟

هل كانت مفيدة؟

المحلول

ويبدو أن تحليل XML أن الأم إلى مسج

لا يوجد تحليل XML الأصلي إلى مسج.فإنه يستخدم فقط معيار مدعوم.responseXML المنشأة للحصول على XML DOM عن الاستجابة.

يتجاهل محتويات CDATA العناصر

ما نوع المحتوى يمكنك إرسال الرد ؟ لأنني أظن أنه لا يتم تحليل كما XML على الإطلاق.في هذه الحالة مسج سوف تمر عليك مرة أخرى سلسلة من الوثيقة ، بدلا من XML DOM.

ثم عند استدعاء "$(xml)" ، فإنه سيتم إنشاء محتوى المستند من هذه السلسلة(*) — تحليل مثل HTML ، لا XML.في HTML لا يوجد شيء مثل CDATA القسم ، لذلك المتصفحات قد تجاهلها أو التعامل معهم كما التعليقات.

وأظن أن هذا بسبب "project.html()" يجب أن لا تعمل في الواقع عندما مستند XML.'html()' فقط بإرجاع نفس معيار 'innerHTML' الملكية (**) الذي يعمل فقط من أجل HTML الوثائق ؛ هو غير معروف على عناصر XML.

أرفق الإخراج في CDATA العلامات يسمح لنا بقية نسبيا أكد أننا بإرسال بيانات صحيحة عن طريق API لدينا.

حسنا, 'نسبيا':إذا كانت البيانات الخاصة بك يحدث لاحتواء "]]>" أنت لا تزال تخسر.آلة XML الذي تم إنشاؤه حقا ينبغي أن مجرد استخدام الكيان الترميز بالطريقة العادية.عادة ملقم التطبيق يجب أن يكون استخدام XML مناسب أدوات توليد الاستجابة في هذه الحالة سوف يتم تلقائيا.

(*:لم يفهم عندما مسج يشعر بالحاجة إلى إسحق الوثيقة جزء الخلق و CSS اختيار في نفس الوظيفة.إنهم تماما العمليات المختلفة التي كنت لا ترغب في الحصول على الخلط ، كما قد حدث هنا.)

(**:في الواقع, فإنه يحاول تصفية مسج سمات مخصصة أولا باستخدام التعابير المنطقية.للأسف منذ regex لا يمكن تحليل HTML, وسوف بسعادة تصفية صالح أجزاء من النص الذي يحدث تبدو سمات HTML.يصيح.لا أحد مسج أجمل أجزاء.)

نصائح أخرى

مسج في الواقع لا يكون محلل xml الآن يجب أن تحل مشكلتك.$.parseXML(xml) http://api.jquery.com/jQuery.parseXML/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top