Разбор XML в webos для фреймворка enyo - PullRequest
1 голос
/ 10 мая 2011

, пожалуйста, помогите мне решить следующую проблему.

проблема в разборе xml мой код xml:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
                <root type="object">
                   <codeListValue type="object">
        <personnelCategory type="array">
          <item type="string">Regular</item>
          <item type="string">International</item>
          <item type="string">Contractor</item>
          <item type="string">System</item>
          <item type="string">Employee</item>
        </personnelCategory>
    <pcImages type="array">
          <item type="string">Windows</item>
          <item type="string">Linux</item>
          <item type="string">MAC OS</item>
          <item type="string">Engineering Image</item>
        </pcImages>

</codeListValue>
</root> 

код синтаксического анализа такой же, как и в web os sdk. Часть синтаксического анализа находится здесь:

parseXML: function() {      
    this.items = [];
    //this.path="/root";
    this.url='Values.xml';
    this.$.getGoogleResults.url = this.url;
    this.$.getGoogleResults.call();
},

... ... gotResultsSuccess: function (inSender, inResponse) {

    var xmlstring = inResponse;
    var parser = new DOMParser();
    var xmlobject = parser.parseFromString(xmlstring, "text/xml");

    var nodes = document.evaluate('/root', xmlobject, null, XPathResult.ANY_TYPE, null);


    var result = nodes.iterateNext();
    //alert(result.textContent);
    var i=0;
    while(result)
            {

        this.items[i] = result.childNodes[0].nodeValue;
        i++;    
        result=nodes.iterateNext();
    }
    this.items=result.textContent;
    this.$.header.setContent(this.items);// [ this is a header component i have defined and i am setting its content here]
        },

Я получаю результат как Регулярный международный подрядчик System ... Инженерное изображение

полное текстовое содержимое в XML отображается последовательно. Как получить отдельные узлы и дочерние узлы. Я получаю нулевые значения для всех этих. Пожалуйста, помогите с некоторыми примерами кода.

Спасибо:)

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Проблема в вашем коде состоит в том, что цикл работает только один раз, то есть существует только один дочерний узел.Приведенный ниже код извлечет все дочерние узлы.

var nodes = document.evaluate('/root/codeListValue', xmlobject, null, XPathResult.ANY_TYPE, null);


    var result = nodes.iterateNext();
    //alert(result.textContent);
    var i=0;
    while(i<result.getElementsByTagName('item').length)
            {

        this.items[i] = result.getElementsByTagName('item')[i].childNodes[0].nodeValue;
        i++;    

    }

Надеюсь, это поможет!

0 голосов
/ 28 июля 2011

Я не совсем уверен, что вы хотите сделать, но вот как я работаю с xml:

Используйте компонент WebService и установите handleAs как xml.

В функции onsuccess,просто возьмите параметр результата и выполните:

res =  result.getElementByName('some_element').

Это вернет все элементы, называемые "some_element" в массиве.

Подробнее о синтаксическом анализе javascript xml можно прочитать на http://www.w3schools.com/xml/xml_dom.asp

...