Java:最有效的方法来遍历org.w3c.dom.Document中的所有元素? [英] Java: Most efficient method to iterate over all elements in a org.w3c.dom.Document?

查看:259
本文介绍了Java:最有效的方法来遍历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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆