【问题标题】:Looping through XML and finding the text node - Jquery循环遍历 XML 并找到文本节点 - Jquery
【发布时间】:2021-10-02 14:07:11
【问题描述】:

我有下面的 XML。

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>';

我需要遍历所有的孩子。我只关心具有值的 XML 标记。下面是我用来循环的代码。

addChildren($f);

  function addChildren( $parent ) {
    $parent.children().each( function( i, child ) {
        console.log(child)
        if(child.childNodes[i] && child.childNodes[i].nodeType === 3){
//I am not getting all the text nodes here even with nodtype 3 check. 
obj.push(
{}
//Push the dynamic key and value)

addChildren( $(child) );
    });

预期输出是

{name : Name1, data1 :123, data2:34567}, {name : Name2, data1 :123, data2:34567}.

有人可以指导我如何获取密钥(标签)和值(文本节点)

【问题讨论】:

    标签: javascript html jquery xml object


    【解决方案1】:

    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 results = $(xml).find("child").map(function () {
        var item = {
            name: $(this).children("name").text()
        };
        $(this).children("details").children().each(function () {
            item[this.localName] = $(this).text();
        });
        return item;
    }).toArray();
    
    console.log(results);
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 嗨,非常感谢您抽出宝贵时间。试图找到一个动态的解决方案,因为 XML 结构可能会发生变化。
    • @Ashwin 使用.children("details").find("*") 而不是.children("details").children()。可能添加if ($(this).text()) { ...}
    • 是的,Tomalak,谢谢,我把那部分整理出来了。
    • @Ashwin 请注意,如果多个子元素具有相同的名称,这种将键添加到相同结果item 的方法将不起作用。您的数据可能不是问题,请记住这一点。
    • 我把代码改成了这个 - var results = $(xml).find("person").map(function () { if ($(this).text()) { $( this).find("*").each(function () { item[this.localName] = $(this).text(); }); } return item; }).toArray(); $(this).text() - 不能过滤掉孩子:“Name212334567”和细节:“12334567”:/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-01
    • 2014-03-30
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多