使用 Jquery 从 XML 数据创建对象数组
Posted
技术标签:
【中文标题】使用 Jquery 从 XML 数据创建对象数组【英文标题】:Create Object array from XML data using Jquery 【发布时间】:2021-10-02 07:08:44 【问题描述】:我想从具有文本节点的 XML 中提取所有数据并创建一个对象数组。使用 Jquery 也是如此。
我有以下 XML 数据。
var header = ['name', 'data1', 'data2'];
var data = '<parent1>' +
'<person>' +
'<name>Name1</name>' +
'<details>' +
'<data1>123</data1>' +
'<data2>34567</data2>' +
'</details>' + '</child>' + '<person>' +
'<name>Name1</name>' +
'<details>' +
'<data1>123</data1>' +
'<data2>34567</data2>' +
'</details>' + '<person>' + '</parent1>';
xmlDoc = $.parseXML( data ),
$xml = $( xmlDoc ),
var tabData = [];
var obj = ;
$xml.find('parent1').each(function(item, index)
header.forEach(function (item, index)
$t = $xml.find(item).text();
obj[item] = $t;
);
tabData.push(obj);
obj = ;
对象应该包含
name : Name1, data1 :123, data2:34567, name : Name2, data1 :123, data2:34567.
循环无法访问文本节点。 $this 也不能帮助我完成对单个孩子的搜索。
要求函数应该是动态的,并且应该适用于任何类型的 XML 树。
谁能帮忙。
【问题讨论】:
您能否edit 提出您的问题并将您已有的循环代码添加为minimal reproducible example? @shaedrich 当然,我同意。谢谢 【参考方案1】:您可以使用parseXML
遍历xml。您的 XML 数据中确实存在一些错误,因此请在继续之前仔细检查您的结束 XML 标记是否正确。
循环遍历每个 person XML 元素并创建一个 javascript obj,然后将其推送到一个数组中。
请看下面的例子:
var xml = '<parent1><person><child><name>Name1</name><details><data1>123</data1><data2>34567</data2></details></child></person><person><child><name>Name2</name><details><data1>123</data1><data2>34567</data2></details></child></person></parent1>';
var xmlDoc = $.parseXML(xml);
var $xml = $(xmlDoc);
var array = [];
$xml.find('person').each(function (index)
var obj =
name: $(this).find('name').text(),
data1: $(this).find('data1').text(),
data2: $(this).find('data2').text()
;
array.push(obj);
);
console.log(array);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
【讨论】:
感谢您的时间。更新了问题。需要函数是动态的。添加了我尝试过的那个,请检查。谢谢。以上是关于使用 Jquery 从 XML 数据创建对象数组的主要内容,如果未能解决你的问题,请参考以下文章
使用jquery表中的复选框从数组中删除JavaScript对象
JQuery 自动完成对第一个按键事件不起作用(源是一个数组)