2014-04-07 4 views
0

JavaScript에서 처리중인 XML과 비슷한 XML이 있습니다.하위를 기준으로 부모 색인 가져 오기 - EX4 - 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는"내가 전체 <entry> 태그를 제거해야합니다. 내 문제는 정상적인 루프에서 그것을 할 경우 인덱스가 변경되고 작동하지 않습니다.

내 질문에, 어떻게 각각 child3, n == "c"중 하나를 제거 할 수 있습니다 - child3 n = "c"인 각 항목이 여러 개일 수 있습니다.

난 당신이 찾고있는 것을 발견하는 XPath

//entry[*/*/*[@n='c']]

을 사용하십시오

+0

이 문서를 어떻게 처리하고 있습니까? XSLT, Python, C#, Java? 또한 해당 종료 태그가 없으므로 해당 문서가 유효하지 않습니다. 자식 요소는 서로 중첩되어 있습니다. 이전 요소에 중첩 된 모든 요소처럼 보입니다. –

+0

안녕하세요, XML을 수정했습니다. 죄송합니다. Javascript를 사용하고 있습니다. – bhavicp

+0

Javascript 코드를 추가하는 것이 좋습니다. –

답변

1

후 제거 :

여기 node.parentNode.removeChild(node);

는 모든 노드를 제거하는 작업 예제 n = 'c'속성 (시도하십시오 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);