当前位置: 首页 > 面试题库 >

Java:最有效的方法来遍历org.w3c.dom.Document中的所有元素?

申屠晟
2023-03-14
问题内容

在Java中遍历所有DOM元素的最有效方法是什么?

像这样,但是对于当前的每个DOM元素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;
}

问题答案:

基本上,您可以通过两种方式遍历所有元素:

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) {
    // 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. 使用getElementsByTagName()带有*as参数的方法 避免递归

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());
        }
    }
}

我认为这些方式都很有效。
希望这可以帮助。



 类似资料:
  • 本文向大家介绍php遍历类中包含的所有元素的方法,包括了php遍历类中包含的所有元素的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php遍历类中包含的所有元素的方法。分享给大家供大家参考。具体分析如下: 这里可获得php类包含的所有元素以key-value的形式输出 运行结果如下: 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 在Java中,迭代字符串中所有字符的最快方法是: 或这个: 编辑: 我想知道的是,在长时间的迭代过程中重复调用该方法的开销是否小于或大于在开始时执行一次单次调用然后在迭代过程中直接访问数组的开销。 如果有人能够针对不同的字符串长度提供可靠的基准测试,那将是非常不错的,同时考虑到JIT的预热时间,JVM的启动时间等,而不仅仅是两个调用之间的区别。 问题答案: 在我的AMDx64 8cor

  • 问题内容: 我想遍历XML打印中的所有元素。我的问题是,在标记之后,我一直收到空指针异常,即 这是我的Java代码,用于打印xml文件中的所有元素: XML档案: 预期产量: 问题答案: 遍历所有子项,并用于过滤出文本节点。如果XML中没有其他内容,则剩下的是人员节点。 对于资料下的每个节点(名称,电话,电子邮件,区域,城市) 会在“东西”下提取“名称”节点,为 您提供第一个节点,并在其中获取文本

  • 问题内容: 我需要JavaScript代码来遍历HTML元素中的填充属性。 这个ref表示我可以通过索引访问它,但是没有指定它是否受良好支持并且可以使用(跨浏览器)。 还是其他方式?(不使用任何框架,例如jQuery / Prototype) 问题答案: 这将在IE,Firefox和Chrome中运行(有人可以测试其他人吗?—谢谢@Bryan): 编辑:IE迭代有问题的DOM对象支持的 所有 属性

  • 问题内容: 我想将许多文件都当作一个文件来对待。用生成器/不将整个文件读入内存的[文件名] => [文件对象] => [行]的正确pythonic方法是什么? 我们都知道打开文件的正确方法: 而且我们知道将多个迭代器/生成器链接为一个长链的正确方法: 但是如何将多个文件链接在一起并保留上下文管理器? 我可以忽略上下文管理器并执行类似的操作,但是感觉不对: 还是这种异步IO-PEP 3156 用途是