获得父母';基于子级的索引-EX4-JavaScript
我有一个类似于下面的XML,我正在用JavaScript处理它获得父母';基于子级的索引-EX4-JavaScript,javascript,xml,Javascript,Xml,我有一个类似于下面的XML,我正在用JavaScript处理它 <doc> <entry> <child1> <child2> <child3 n="a"> </child3> </child2> </child1> </entry> <entry> <child1> <ch
<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=“c”,我需要删除整个
标记。我的问题是,如果我在一个正常的循环中执行,索引会发生变化,它就不工作了
所以我的问题是,我如何删除其中一个child3,n==“c”-child3 n=“c”中的每个条目可以有多个。我会使用xpath
//条目[*/*/*[@n='c']]
要查找您要查找的内容,请将其删除:
node.parentNode.removeChild(节点)代码>
下面是一个删除所有具有n='c'属性的节点的工作示例(请尝试):
var xmlStr=”“;
xmlStr+=”;
xmlStr+=”;
xmlStr+=”;
xmlStr+=”;
xmlStr+=”;
var xmlToString=函数(oXML){
if(window.ActiveXObject){
返回oXML.xml;
}否则{
返回(新的XMLSerializer()).serializeToString(oXML);
}
}
//发件人:http://stackoverflow.com/a/8412989/83418
var-parseXml;
if(typeof window.DOMParser!=“未定义”){
parseXml=函数(xmlStr){
return(new window.DOMParser()).parseFromString(xmlStr,“text/xml”);
};
}else if(typeof window.ActiveXObject!=“未定义”&&
新建window.ActiveXObject(“Microsoft.XMLDOM”)){
parseXml=函数(xmlStr){
var xmlDoc=new window.ActiveXObject(“Microsoft.XMLDOM”);
xmlDoc.async=“false”;
loadXML(xmlStr);
返回xmlDoc;
};
}否则{
抛出新错误(“未找到XML解析器”);
}
var xpath=“//条目[*/*/*[@n='c']]”;
var xml=parseXml(xmlStr);
var nodes=xml.evaluate(xpath,xml,null,XPathResult.ORDERED\u NODE\u SNAPSHOT\u TYPE,null);
对于(var i=0;i
您是如何处理此文档的?XSLT、Python、C#、Java?此外,该文档无效,因为没有结束标记。子元素是否嵌套在彼此内部,看起来其中的每个元素都嵌套在前面的元素中。嗨,我已经修复了XML-很抱歉。我正在使用Javascript。我建议您也加入您正在使用的Javascript代码。
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);