如何将 XML 个节点和内容动态加载到变量中
How to load XML nodes and content into variables dynamically
我有一长串 XML 分成几个部分。对于每个页面,它根据类别节点 (list_node) 从 XML 加载内容。现在我通过直接引用节点来获取内容,但我不想为每个节点都写一行。
有没有办法只读取 XML,将节点加载到数组中,然后设置一个新变量作为节点名称并加载内容?这是我当前的设置:
<media_item>
<title>temporary title</title>
<key>652843722</key>
<path>/states/CA</path>
<filename>climate-pollution-harmful.html</filename>
<link>http://a-url-goes-here.com</link>
<blank>yes</blank>
<author/>
<date>August 15, 2015</date>
</media_item>
(XML 有更多的节点,并且不同的类别都由我代码前面的 "list_node" 调用指定)
$.ajax({
type: "GET",
url: "http://url-of/file.xml,
dataType: "xml",
success: function(xml){
$(xml).find(list_node).each(function(i){
var title = $(this).find('title').text();
var url = $(this).find('link').text();
var date = $(this).find('date').text();
var author = $(this).find('author').text();
var org = $(this).find('org').text();
所以我希望它自动执行,而不是 "var title = $(this).find('title').text();" 每个节点。
如果所有节点都是简单的文本节点,您可以遍历 children()
并使用 tagName
作为 属性 名称创建对象数组
$.get('data.xml', function (xml) {
var results = $(xml).find('media_item').map(function () {
var row = {}
$(this).children().each(function () {
row[this.tagName] = $(this).text();
});
return row;
}).get();
console.log(results);
}, 'xml');
这也可以很容易地适应以包含属性。
以上代码将显示的 xml 转换为:
[
{
"title": "temporary title",
"key": "652843722",
"path": "/states/CA",
"filename": "climate-pollution-harmful.html",
"link": "http://a-url-goes-here.com",
"blank": "yes",
"author": "",
"date": "August 15, 2015"
}
]
我有一长串 XML 分成几个部分。对于每个页面,它根据类别节点 (list_node) 从 XML 加载内容。现在我通过直接引用节点来获取内容,但我不想为每个节点都写一行。
有没有办法只读取 XML,将节点加载到数组中,然后设置一个新变量作为节点名称并加载内容?这是我当前的设置:
<media_item>
<title>temporary title</title>
<key>652843722</key>
<path>/states/CA</path>
<filename>climate-pollution-harmful.html</filename>
<link>http://a-url-goes-here.com</link>
<blank>yes</blank>
<author/>
<date>August 15, 2015</date>
</media_item>
(XML 有更多的节点,并且不同的类别都由我代码前面的 "list_node" 调用指定)
$.ajax({
type: "GET",
url: "http://url-of/file.xml,
dataType: "xml",
success: function(xml){
$(xml).find(list_node).each(function(i){
var title = $(this).find('title').text();
var url = $(this).find('link').text();
var date = $(this).find('date').text();
var author = $(this).find('author').text();
var org = $(this).find('org').text();
所以我希望它自动执行,而不是 "var title = $(this).find('title').text();" 每个节点。
如果所有节点都是简单的文本节点,您可以遍历 children()
并使用 tagName
作为 属性 名称创建对象数组
$.get('data.xml', function (xml) {
var results = $(xml).find('media_item').map(function () {
var row = {}
$(this).children().each(function () {
row[this.tagName] = $(this).text();
});
return row;
}).get();
console.log(results);
}, 'xml');
这也可以很容易地适应以包含属性。
以上代码将显示的 xml 转换为:
[
{
"title": "temporary title",
"key": "652843722",
"path": "/states/CA",
"filename": "climate-pollution-harmful.html",
"link": "http://a-url-goes-here.com",
"blank": "yes",
"author": "",
"date": "August 15, 2015"
}
]