Разбор XML в Mootools - PullRequest
       0

Разбор XML в Mootools

4 голосов
/ 18 августа 2011

Кажется, что нет никакой полезной документации о разборе XML в Mootools.Либо это так глупо легко, что никто не удосужился бы упомянуть об этом, либо это так чертовски трудно, что все бросили попытки.У кого-нибудь есть какой-нибудь простой кросс-браузерный метод для анализа XML с помощью Mootools?

Вот мой маленький XML-файл data.xml:

<?xml version="1.0"?>
<suggestions>
   <suggestion winning="Y">
      <copy><![CDATA[Draw straws to see who wins]]>
      </copy>
      <person><![CDATA[Sue]]>
      </person>
      <location><![CDATA[London]]>
      </location>
   </suggestion>
   <suggestion winning="N">
      <copy><![CDATA[Race your friends round the meeting room]]>
      </copy>
      <person><![CDATA[Jack]]>
      </person>
      <location><![CDATA[Lancaster]]>
      </location>
   </suggestion>
</suggestions>

А это мой JS:

window.addEvent('domready', function(){

    var outputHTML = '';

    var req = new Request({
        url: 'data.xml',
        method: 'get',
        onSuccess: function(responseText, responseXML) {                
            if(typeOf(responseXML) != 'document'){
                responseXML = responseXML.documentElement; 
            }
            var suggestions = responseXML.getElements('suggestion');
            suggestions.each(function(item) {
                    outputHTML += '<p>';
                    outputHTML += item.getElement('copy').get('text') + '<br/>';
                    outputHTML += '<b>' + item.getElement('person').get('text') + '</b>: ';
                    outputHTML += item.getElement('location').get('text')  + '<br/>';                   
                    if (item.get('winning') == 'Y') {
                        outputHTML += ' <b>Won!</b>';
                    }
                    outputHTML += '</p>';
            });
            $('output').set('html', outputHTML); 
        }
    }).send();

});

Я обнаружил, что мне нужно сделать бит responseXML = responseXML.documentElement, чтобы он работал в Chrome.Этот JS работает нормально в Chrome и FF, но IE жалуется, что «Объект не поддерживает это свойство или метод» для строки 16, где я пытаюсь запустить getElements («предложение») для responseXML.

МожетЛюбой добрый эксперт восстановит мою веру в мистические силы Mootools?

Приветствия Фред

Ответы [ 2 ]

4 голосов
/ 11 февраля 2013

Это довольно старый вопрос, но у меня недавно была такая же проблема, поэтому я хотел бы поделиться своим решением.

Переменная responseXML, которую вы получаете от Request, - это просто неизмененный XML-ответ вашего браузера. В IE (до версии 9) вы получите объект IXMLDOMDocument. Я обнаружил, что самый простой способ преобразовать этот объект в дерево MooTools Element заключается в следующем:

function(responseText, responseXML) {
    var doc = responseXML.documentElement;
    if (doc.xml) {
        doc = new Element('div', { html: doc.xml }).getFirst();
    }
    // Now you can use 'doc' like any other MooTools Element
}

В качестве альтернативы, вы можете использовать IE DOMParser, который может быть более эффективным:

function(responseText, responseXML) {
    var doc = responseXML.documentElement;
    if (doc.xml) {
        var parser = new DOMParser();
        var html = parser.parseFromString(doc.xml, 'text/xml');
        doc = document.id(html.documentElement);
    }
    // Now you can use 'doc' like any other MooTools Element
}
0 голосов
/ 18 августа 2011

В MooTools Forge есть плагин для преобразования XML в объект JavaScript:

http://mootools.net/forge/p/xml2js_converter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...