如何将XML节点和内容动态加载到变量中

How to load XML nodes and content into variables dynamically

本文关键字:加载 动态 变量 XML 节点      更新时间:2023-09-26

我有一个很长的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&nbsp;15,&nbsp;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"
 }
]
演示