循环遍历 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);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
【讨论】:
嗨,非常感谢您抽出宝贵时间。试图找到一个动态的解决方案,因为 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的主要内容,如果未能解决你的问题,请参考以下文章
jQuery$.each循环遍历详解,各种取值对比,$.each遍历数组对象Dom元素二维数组双层循坏类json数据等等