作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用 javascript 遍历上层标签的不同子标签并将标签名和值打印到 HTML。一个简短的例子
<Product>
<Books>
<Genere>
<Sport>
<Name>Book A</Name>
<Name>Book B</Name>
<Name>Book C</Name>
</Sport>
<Genere>
<History>
<Name>Book A</Name>
<Name>Book B</Name>
<Name>Book C</Name>
</History>
</Genere>
</Books>
<Product>
假设我想按以下方式打印 6 本书的名称:
名称:书A名称:书B名称:书C
名称:书A名称:书B名称:书C
我查看了 W3C 示例,但它们并没有多大帮助。
最佳答案
首先,您需要将 XML 字符串解析为 XMLDOM 对象。然后,您可以使用该对象的各种方法和属性来导航节点并获取所需的数据。我在下面添加了一个示例。请注意,您的数据中缺少结束标记(第一个 <Genere>
节点)。
//Function to parse XML string into an xml dom object
var parseXML = function(text){
var xmlDoc;
if (window.DOMParser){
var parser = new DOMParser();
xmlDoc = parser.parseFromString(text, "text/xml");
} else {
// Internet Explorer
xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = false;
xmlDoc.loadXML(text);
}
return xmlDoc;
}
//Function to get child nodes by name
var getChildrenByName = function(node, name){
var childNodes = node.childNodes, matchingNodes = [];
for(var i=0; i<childNodes.length; ++i){
if(childNodes[i].nodeType !== Node.TEXT_NODE && childNodes[i].tagName == name){
matchingNodes.push(childNodes[i]);
}
}
return matchingNodes;
}
//Test data
var data = '<Product><Books><Genere><Sport><Name>Book A</Name><Name>Book B</Name><Name>Book C</Name></Sport></Genere><Genere><History><Name>Book A</Name><Name>Book B</Name><Name>Book C</Name></History></Genere></Books><Product>'
//Execute parse
var doc = parseXML(data);
//Get Product node
var product = doc.firstChild;
//Get Books node
var books = getChildrenByName(product, 'Books')[0];
//Get genres
var genres = getChildrenByName(books, 'Genere');
//Loop through genres
var str = '';
for(var i=0; i<genres.length; ++i){
var genre = genres[i].firstChild;
str += '<h2>'+genre.tagName+'</h2>';
//Get book names
var bookNames = getChildrenByName(genre, 'Name');
//Loop book names
for(var j=0; j<bookNames.length; ++j){
str += bookNames[j].textContent + '<br>';
}
}
document.body.innerHTML = str;
关于Javascript 从 REST 循环遍历 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46935508/
我是一名优秀的程序员,十分优秀!