firstChild 应该也不行的吧 nodeValue属性只能取文本节点的值,可参考:https://developer.mozilla.org/zh-CN/docs/Web/API/Node/nodeValue
你这里实际可以直接取 第一个子节点的内容的,能否使用x[i].childNodes[0].innerHTML
或者 x[i].childNodes[0].innerText
呢?
补充,上面说法有误,因为没有考虑空文本节点。
// xml 字符串
var xmlstr = `<?xml version="1.0" encoding="utf-8"?>
<message>
<info id="1">
<username>duxingzhe</username>
<content>hello world --by diankuangzhe</content>
</info>
<info id="2">
<username>duxingzhe</username>
<content>试试编码怎么样?</content>
</info>
<info id="3">
<username>wky</username>
<content>happybirthday</content>
</info>
<info id="4">
<username>duxingzhe</username>
<content>42141</content>
</info>
<info id="5">
<username>duxingzhe</username>
<content>haha</content>
</info>
<info id="6">
<username>duxingzhe</username>
<content>不知道呀</content>
</info>
<info id="7">
<username>duxingzhe</username>
<content>你好呀</content>
</info>
<info id="8">
<username>duxingzhe</username>
<content>你好呀</content>
</info>
</message>`
// 解析为XML
var xml = $.parseXML(xmlstr)
上面模拟好了 XML文档 下面进行测试
var x=xml.getElementsByTagName('info');
x; // [info#1, info#2, info#3, info#4, info#5, info#6, info#7, info#8]
x[0].childNodes[0]; // #text
看到了吧 上面的x[0].childNodes[0] 是#text 实际是取到了info和username的之间的空白文本(换行)
有图为证:
既然知道了问题,那么就有方案了:
1、XML文本改成不换行的 没空格的 (这个当我没说,实际很难控制)
2、直接找到username标签,再获取值,如下所示:
var uname = x[0].getElementsByTagName('username')[0];
uname.firstChild.data;// duxingzhe
想想直接处理XML还是比较烦的。
可以使用xmltojson 将xml转为json,然后再处理。
或者使用jQuery 来取吧。
$(xml).find('info').each(function(index,item){
var $item = $(item);
console.log($item.find('username').text() , $item.find('content').text())
});
// duxingzhe hello world --by diankuangzhe
// duxingzhe 试试编码怎么样?
// wky happybirthday
// duxingzhe 42141
// duxingzhe haha
// duxingzhe 不知道呀
// duxingzhe 你好呀
// duxingzhe 你好呀
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…