Java:最有效的方法来遍历org.w3c.dom.Document中的所有元素? [英] Java: Most efficient method to iterate over all elements in a org.w3c.dom.Document?
问题描述
这样的东西,但是对于当前上的每一个DOM元素,最有效的方式是遍历Java中的所有DOM元素(Node childNode = node.getFirstChild();)$($)
$ b $ childNode!= null;){
Node nextChild = childNode.getNextSibling();
//使用childNode执行某些操作,包括移动或删除...
childNode = nextChild;
}
基本上你有两种方法迭代所有元素:
1。使用递归(最常见的方式):
public static void main(String [] args)throws SAXException,IOException,
ParserConfigurationException,TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File(document.xml));
doSomething(document.getDocumentElement());
}
public static void doSomething(Node node){
//使用当前节点而不是System.out执行某些操作
System.out.println(node .getNodeName());
NodeList nodeList = node.getChildNodes(); (int i = 0; i< nodeList.getLength(); i ++){
Node currentNode = nodeList.item(i);
if(currentNode.getNodeType()== Node.ELEMENT_NODE){
//为所有子元素调用此方法,即Element
doSomething(currentNode);
}
}
}
2。使用 getElementsByTagName()
方法使用 *
作为参数避免递归:
public static void main(String [] args)throws SAXException,IOException,
ParserConfigurationException,TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File(document.xml));
NodeList nodeList = document.getElementsByTagName(*); (int i = 0; i< nodeList.getLength(); i ++){
Node node = nodeList.item(i);
if(node.getNodeType()== Node.ELEMENT_NODE){
//使用当前元素执行某些操作
System.out.println(node.getNodeName());
}
}
}
我认为这两种方式都是有效。
希望这有帮助。
What is the most efficient way to iterate through all DOM elements in Java?
Something like this but for every single DOM elements on current org.w3c.dom.Document
?
for(Node childNode = node.getFirstChild(); childNode!=null;){
Node nextChild = childNode.getNextSibling();
// Do something with childNode, including move or delete...
childNode = nextChild;
}
Basically you have two ways to iterate over all elements:
1. Using recursion (the most common way I think):
public static void main(String[] args) throws SAXException, IOException,
ParserConfigurationException, TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("document.xml"));
doSomething(document.getDocumentElement());
}
public static void doSomething(Node node) {
// do something with the current node instead of System.out
System.out.println(node.getNodeName());
NodeList nodeList = node.getChildNodes();
for (int i = 0; i < nodeList.getLength(); i++) {
Node currentNode = nodeList.item(i);
if (currentNode.getNodeType() == Node.ELEMENT_NODE) {
//calls this method for all the children which is Element
doSomething(currentNode);
}
}
}
2. Avoiding recursion using getElementsByTagName()
method with *
as parameter:
public static void main(String[] args) throws SAXException, IOException,
ParserConfigurationException, TransformerException {
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
.newInstance();
DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
Document document = docBuilder.parse(new File("document.xml"));
NodeList nodeList = document.getElementsByTagName("*");
for (int i = 0; i < nodeList.getLength(); i++) {
Node node = nodeList.item(i);
if (node.getNodeType() == Node.ELEMENT_NODE) {
// do something with the current element
System.out.println(node.getNodeName());
}
}
}
I think these ways are both efficient.
Hope this helps.
这篇关于Java:最有效的方法来遍历org.w3c.dom.Document中的所有元素?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!