我有一个类似于以下的XML,我正在用JavaScript处理。
<doc>
<entry>
<child1>
<child2>
<child3 n="a">
</child3>
</child2>
</child1>
</entry>
<entry>
<child1>
<child2>
<child3 n="b">
</child3>
</child2>
</child1>
</entry>
<entry>
<child1>
<child2>
<child3 n="c">
</child3>
</child2>
</child1>
</entry>
</doc>
如果是child3,n =&#34; c&#34;,我需要删除整个<entry>
标记。我的问题是,如果我在正常循环中进行,索引会发生变化而且无法正常工作。
所以我的问题是,如何删除其中一个child3,n ==&#34; c&#34; - 每个条目可以有多个,其中child3 n =&#34; c&#34;。
答案 0 :(得分:1)
我使用xpath
//entry[*/*/*[@n='c']]
找到您要查找的内容,然后将其删除:
node.parentNode.removeChild(node);
这是一个使用n =&#39; c&#39;删除所有节点的工作示例。属性(试试here):
var xmlStr = "<doc><entry><child1> <child2> <child3 n='a'> </child3> </child2> </child1> </entry>";
xmlStr += "<entry> <child1> <child2> <child3 n='c'> </child3> </child2> </child1> </entry>";
xmlStr += "<entry> <child1> <child2> <child3 n='b'> </child3> </child2> </child1> </entry>";
xmlStr += "<entry> <child1> <child2> <child3 n='d'> </child3> </child2> </child1> </entry>";
xmlStr += "<entry> <child1> <child2> <child3 n='c'> </child3> </child2> </child1> </entry>";
xmlStr += "</doc>";
var xmlToString = function(oXML) {
if (window.ActiveXObject) {
return oXML.xml;
} else {
return (new XMLSerializer()).serializeToString(oXML);
}
}
//From: http://stackoverflow.com/a/8412989/83418
var parseXml;
if (typeof window.DOMParser != "undefined") {
parseXml = function(xmlStr) {
return (new window.DOMParser()).parseFromString(xmlStr, "text/xml");
};
} else if (typeof window.ActiveXObject != "undefined" &&
new window.ActiveXObject("Microsoft.XMLDOM")) {
parseXml = function(xmlStr) {
var xmlDoc = new window.ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async = "false";
xmlDoc.loadXML(xmlStr);
return xmlDoc;
};
} else {
throw new Error("No XML parser found");
}
var xpath = "//entry[*/*/*[@n='c']]";
var xml = parseXml(xmlStr);
var nodes = xml.evaluate(xpath,xml,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
for ( var i=0 ; i < nodes.snapshotLength; i++) {
var node = nodes.snapshotItem(i);
node.parentNode.removeChild(node);
}
var updatedXml = xmlToString(xml);
alert(updatedXml);