`

Dom删除XML节点时应注意的问题

    博客分类:
  • XML
XML 
阅读更多

当循环删除XML中的节点时应该注意删除节点后长度变化的问题。

删除节点的方法:

list = root.getElementsByTagName("LineItemDetails");
	length = list.getLength();
	for (int i = 0; i < length; i++) {
	Node node = list.item(0);
	if(node.getParentNode().getNodeName() !=null && !node.getParentNode().getNodeName().equals("AirWaybillBillOfLadingInfo")){
		root.removeChild(node);
	}
}

 

方法二:

Element root = doc.getDocumentElement();
		NodeList list = root.getElementsByTagName("LineItemDetails");
		int length = list.getLength();
		for(int i=0;i<list.getLength();i++){
			Node nodeItem = list.item(i);
			NodeList listChild = nodeItem.getChildNodes();
			for(int k=0;k<listChild.getLength();k++){
				Node nodeChild = listChild.item(k);
				if(nodeChild.getNodeType()==Node.ELEMENT_NODE){
					if(nodeChild.getNodeName().equals("MasterAirWaybillNo") || nodeChild.getNodeName().equals("HouseAirWaybillNo") ||  nodeChild.getNodeName().equals("ConsolidationIndicator") || nodeChild.getNodeName().equals("ConsolidationItemNo")){
						nodeItem.removeChild(nodeChild);
						k--;
					
					}
				}
			}
		
		}

 

 

方法三:

NodeList list = root.getElementsByTagName("LineItemDetails");
		int length = list.getLength();
		for(int i=0;i<list.getLength();i++){
			Node nodeItem = list.item(i);
			NodeList listChild = nodeItem.getChildNodes();
			int leng = listChild.getLength();
			for(int k=0;k<leng;k++){
				Node nodeChild = listChild.item(k);
				if(nodeChild.getNodeType()==Node.ELEMENT_NODE){
					if(nodeChild.getNodeName().equals("MasterAirWaybillNo") || nodeChild.getNodeName().equals("HouseAirWaybillNo") ||  nodeChild.getNodeName().equals("ConsolidationIndicator") || nodeChild.getNodeName().equals("ConsolidationItemNo")){
						nodeItem.removeChild(nodeChild);
						k--;
						leng--;
					
					}
				}
			}
		
		}

 

总之需要注意删除节点后,listChild.getLength();将重新获得值。。最好采用第三种方式。删除一个节点后将循环变量和总节点数都减少一。。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics