循环遍历 XML 并找到文本节点 - Jquery

Posted

技术标签:

【中文标题】循环遍历 XML 并找到文本节点 - Jquery【英文标题】:Looping through XML and finding the text node - 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.

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

【问题讨论】:

【参考方案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”:/

以上是关于循环遍历 XML 并找到文本节点 - Jquery的主要内容,如果未能解决你的问题,请参考以下文章

VBA 循环遍历 XML 节点并在每个节点中获取值

循环遍历XML节点并重用元素

使用类循环遍历每个元素并附加其文本JQUERY

循环遍历节点并使用 XSLT 将值附加到字符串

尝试循环通过 XML 提取 PLSQL 中的值

jQuery$.each循环遍历详解,各种取值对比,$.each遍历数组对象Dom元素二维数组双层循坏类json数据等等