读取xml确保节点上的顺序将被保留

时间:2016-02-13 16:29:08

标签: javascript dom-traversal

我正在使用JavaScript阅读此XML 我怎样才能确保我按照<item>中的<record>元素按照xml中存在的相同顺序阅读record[index].find("item:eq(0)").text(); record[index].find("item:eq(1)").text(); 元素(所以[Robinson Crusoe]将首先出现[Daniel Defo])

这会有用吗?

<result>
   <record>
        <item>Robinson Crusoe</item>
        <item>Daniel Defo</item>
   </record>
   <record>
        <item>Gullivers Travels</item>
        <item>Jonathan Swift</item>
   </record>
   <record>
        <item>Tom Jones</item>
        <item>Henry Fielding</item>
   </record>
</result>

的xml:

setupWithViewPager()

2 个答案:

答案 0 :(得分:2)

只需几行普通Javascript,您就可以将XML数据转换为数组。没有理由为此加载像jQuery这样的大型框架(除非它在其他地方使用)。正如您从示例中看到的那样,数组项的排序与XML中的相同。这个解决方案最适合问题的简单XML结构。

点击显示代码并运行代码段以查看其有效:

var i, xmlStr, items, list = [];

xmlStr = document.getElementById('data').value;

items = (new window.DOMParser())
  .parseFromString( xmlStr, 'text/xml')
  .getElementsByTagName('item');


for (i = 0; i < items.length; i++) {
  list.push(items[i].childNodes[0].nodeValue);
};


document.getElementById('stdout').value = JSON.stringify(list, null, ' ');
textarea {
  width: 25em;
  height: 6em;
  padding: 0.5em;
  border: 1px solid black;
}
<div>JS ARRAY</div>
<textarea id="stdout"></textarea>

<div>XML</div>
<textarea id="data">
  <result>
    <record>
      <item>Robinson Crusoe</item>
      <item>Daniel Defo</item>
    </record>
    <record>
      <item>Gullivers Travels</item>
      <item>Jonathan Swift</item>
    </record>
    <record>
      <item>Tom Jones</item>
      <item>Henry Fielding</item>
    </record>
  </result>
</textarea>

items = ( new window.DOMParser() )
  .parseFromString( xmlStr, 'text/xml' )
  .getElementsByTagName( 'item' );

for (i = 0; i < items.length; i++) 
  list.push(items[i].childNodes[0].nodeValue );

答案 1 :(得分:1)

如果你可以使用jquery,那么代码将处理xml输入以提供顺序输出。

inputxml包含用于处理的xml输入。

$(inputxml).find('record').each(function()
{
  var name = $(this).find('item').text(); 
});

或者如果您只想获得第一个节点,则可以这样做

var result = $(inputxml).find('result record').first()

另一种方式是

$(inputxml).find('result record:eq(0)')