如何用JavaScript读取XML中items标签下所有子标签的值
解决XML中读取
<items>下所有子标签值的问题 嘿,我懂你不想逐个指定标签名的痛点!你已经成功拿到了XML文档和<items>节点,接下来只需要遍历它的子元素集合,就能批量提取所有子标签的值了。这里给你补全并优化代码:
var xmlDoc; var xhr = new XMLHttpRequest(); xhr.open('GET', 'prueba.xml', true); // 显式声明异步请求,代码更清晰 xhr.onreadystatechange = function() { // 务必判断请求成功完成后再处理XML,避免报错 if (xhr.readyState === 4 && xhr.status === 200) { xmlDoc = xhr.responseXML; var items = xmlDoc.getElementsByTagName("items")[0]; // 遍历items下的所有直接子元素(只取标签节点,过滤空白文本节点) var childTags = items.children; for (var i = 0; i < childTags.length; i++) { var tagName = childTags[i].tagName; var tagValue = childTags[i].textContent.trim(); // 去除文本前后空白字符 console.log(`${tagName}: ${tagValue}`); // 这里可以把值存入数组/对象,方便后续业务使用 } } }; xhr.send();
关键细节说明:
- 用
items.children替代childNodes:childNodes会包含换行、空格这类空白文本节点,children只返回元素类型的子节点,正好对应你要的子标签。 textContent兼容性拉满:相比innerText,它能在更多浏览器中稳定获取标签内的所有文本内容。- 加上
trim()很实用:避免XML里的换行、缩进带来的不必要空格干扰。
进阶:如果<items>下有嵌套子标签
要是你的XML结构里<items>下还有多层嵌套标签,可以用递归函数一次性提取所有层级的标签值:
function extractAllTagValues(element) { var result = {}; var childElements = element.children; for (var i = 0; i < childElements.length; i++) { var child = childElements[i]; if (child.children.length > 0) { // 有子元素就递归提取,生成嵌套对象 result[child.tagName] = extractAllTagValues(child); } else { result[child.tagName] = child.textContent.trim(); } } return result; } // 使用示例: var allItemData = extractAllTagValues(items); console.log(allItemData); // 得到一个包含所有标签值的结构化对象
内容的提问来源于stack exchange,提问作者Waymas
相关产品推荐
相关产品推荐

