在webos中为enyo框架解析Xml

时间:2011-05-10 13:15:47

标签: xml webos enyo

请帮助我解决以下问题。

问题出在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]
        },

我得到的结果是 常规国际承包商系统......工程图像

XML中的完整文本内容是连续显示的。我是否获得单个节点和子节点。我得到所有这些的空值.PLease帮助一些代码示例。

谢谢:)

2 个答案:

答案 0 :(得分:1)

代码中的问题是循环只能运行一次,即只有一个子节点。 下面的代码将检索所有子节点。

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

    }

希望这有帮助!

答案 1 :(得分:0)

我不太确定你想做什么,但这是我如何使用xml:

使用WebService组件并将handleAs设置为xml。

在onsuccess函数上,只需获取结果参数并执行:

res =  result.getElementByName('some_element').

这将返回数组中名为“some_element”的所有元素。

您可以在http://www.w3schools.com/xml/xml_dom.asp

阅读有关javascript xml解析的更多信息