【问题标题】:jquery parse xml for multiple tagsjquery为多个标签解析xml
【发布时间】:2017-06-15 04:41:26
【问题描述】:

我想从一个 XML 文档中获取多个标签。我查看了this question,它基本上获取了一个标签的子元素,而我想要所有标签。使用相同的 XML 示例(复制如下):

var data = 
"<root>
    <instructions>Some ins text.</instructions>
    <options>
       <option>1.png</option>
       <option>2.png</option>
       <option>3.png</option>
       <option>4.png</option>
    </options>
    <noOfOptions>4</noOfOptions>
</root>";

如何获取“instructions”、“options”和“noOfOptions”的值?

我可以像这样重复代码三遍:

xml = $.parseXML(data),
$data = $( xml ),
$options = $data.find("option"); // get all option nodes

xml = $.parseXML(data),
$data = $( xml ),
$instructions = $xml.find("instructions"); // get instructions

xml = $.parseXML(data),
$data = $( xml ),
$noOfOptions = $xml.find("noOfOptions"); // get noOfOptions

但这似乎不对。有没有正确(和更有效)的方法来做到这一点?我觉得.each函数跟它有关系,但是不太明白怎么用。

【问题讨论】:

  • 只有一个instructions和多个options吗?
  • 不一定。事实上,大多数时候,我不需要再降一级。
  • 我担心instructions 的数量,因为在我的回答中我假设只有一个。如果它可以更多,那么你应该为options 制作一个数组。

标签: javascript jquery xml parsexml


【解决方案1】:

var data = 
"<root>\
    <instructions>Some ins text.</instructions>\
    <options>\
       <option>1.png</option>\
       <option>2.png</option>\
       <option>3.png</option>\
       <option>4.png</option>\
    </options>\
    <noOfOptions>4</noOfOptions>\
</root>";


var xml = $.parseXML(data);
var $data = $( xml );

var instructions = $data.find("instructions").text();
var options = [];
$data.find("option").each(function(){
  options.push($(this).text());
});

console.log("instructions: " + instructions);
console.log("options: ", options);
&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

【讨论】:

    【解决方案2】:

    如果你的结构是固定的,你可以试试这个:

     var data = 
    "<root>"+
        "<instructions>Some ins text.</instructions>"+
        "<options>"+
          " <option>1.png</option>"+
           "<option>2.png</option>"+
          " <option>3.png</option>"+
          " <option>4.png</option>"+
       " </options>"+
       " <noOfOptions>4</noOfOptions>"+
       "<instructions>Some ins text1.</instructions>"+
       "<options>"+
         " <option>1.png</option>"+
          "<option>2.png</option>"+
         " <option>3.png</option>"+
         " <option>4.png</option>"+
      " </options>"+
      " <noOfOptions>4</noOfOptions>"+
    "</root>";
    xml = $.parseXML(data);
    var arr=[];
        var arr=[];
        $("instructions", xml).each(function (index,val) {
    
            arr[index]=[];
            arr[index]['instructions']=$(this).text();
            arr[index]['option']=[];
            $("option",$(val).next()).each(function(){
                arr[index]['option'].push($(this).text());
            });
            arr[index]['noOfOptions']=[];
            arr[index]['noOfOptions']=$($(val).next()).next().text();
    
            });
        console.log(arr);
    

    控制台输出:

    [Array[0], Array[0]]0: Array[0]instructions: "Some ins text."length: 0noOfOptions: "4"option: Array[4]proto: Array[0]1: Array[0]length: 2__proto__: 数组[0]

    Fiddle

    如果您需要整个数据为 json(可以在 jquery 数组/对象中转换),您可以使用:xml2json

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多