Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获得父母';基于子级的索引-EX4-JavaScript_Javascript_Xml - Fatal编程技术网

获得父母';基于子级的索引-EX4-JavaScript

获得父母';基于子级的索引-EX4-JavaScript,javascript,xml,Javascript,Xml,我有一个类似于下面的XML,我正在用JavaScript处理它 <doc> <entry> <child1> <child2> <child3 n="a"> </child3> </child2> </child1> </entry> <entry> <child1> <ch

我有一个类似于下面的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=“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);