`
namezhou
  • 浏览: 158756 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用递归和dom遍历dom树形结构

阅读更多

使用递归逆推出xml文件的大体结构

package com.dowebber.xmlreader;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class RecursionBasedDomXmlParser {


 public static void main(String[] args) {
  
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  try {
   DocumentBuilder builder = dbf.newDocumentBuilder();
   Document doc = builder.parse("src/xml/employee.xml");
   doc(doc);
   
  } catch (ParserConfigurationException e) {
   e.printStackTrace();
  } catch (SAXException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
 
 private static void doc(Document doc){
  NodeList list = doc.getChildNodes();
  node(list);
 }
 
 private static void node(NodeList list){
  int len1 = list.getLength();
  if(len1 == 0){return;}
  for(int i=0;i<list.getLength();i++){
   Node node = list.item(i);
   if(node.getNodeType() == Node.TEXT_NODE){ //文本节点
    if(node.getTextContent().trim().length() > 0){
     System.out.println("#TEXT: " + node.getTextContent().trim());
    }
   }else if(node.getNodeType() == Node.COMMENT_NODE){ //注释节点
     System.out.println("<!--" + node.getTextContent().trim() + "-->");
   }else if(node.getNodeType() == Node.ELEMENT_NODE){
    if(node.hasChildNodes()){
     //考虑只有文本节点的情况<xxx>x</xxx>的情况
     int noneTextNodeCount = 0;
     NodeList childs = node.getChildNodes();
     for (int j = 0; j < childs.getLength(); j++) {
      if(childs.item(j).getNodeType() != Node.TEXT_NODE && node.getNodeType() != Node.COMMENT_NODE){
       noneTextNodeCount++;
      }
     }
     if(noneTextNodeCount != 0){
      System.out.print("<" + node.getNodeName() + " ");
      NamedNodeMap atts = node.getAttributes();
      if(atts != null){
       for (int j = 0; j < atts.getLength(); j++) {
        Node att = atts.item(j);
        if(att == null){continue;}
        System.out.print(att.getNodeName()+"='"+att.getNodeValue()+"' ");
       }
      }
      System.out.print(">");
      node(childs);
      System.out.print("</" + node.getNodeName() + ">");
      System.out.println();
     }else{
      //只有文本节点<xxx>x</xxx>
      System.out.print("<" + node.getNodeName() + " ");
      NamedNodeMap atts = node.getAttributes();
      if(atts != null){
       for (int j = 0; j < atts.getLength(); j++) {
        Node att = atts.item(j);
        if(att == null){continue;}
        System.out.print(att.getNodeName()+"='"+att.getNodeValue()+"' ");
       }
      }
      System.out.print(">");
      System.out.print(childs.item(0).getTextContent().trim());
      System.out.print("</" + node.getNodeName() + ">");
      System.out.println();
     }
    }else{
     //没有子节点 <xxx /> 这样的情况
     System.out.print("<" + node.getNodeName() + " ");
     NamedNodeMap atts = node.getAttributes();
     if(atts != null){
      for (int j = 0; j < atts.getLength(); j++) {
       Node att = atts.item(j);
       if(att == null){continue;}
       System.out.print(att.getNodeName()+"='"+att.getNodeValue()+"' ");
      }
     }
     System.out.print("/>");
     System.out.println();
    }
   }else if(node.getNodeType() == Node.DOCUMENT_TYPE_NODE){
    System.out.println("<!DOCTYPE " + node.getNodeName() + ">");
   }
   
  }
 }
 

}

 

分享到:
评论

相关推荐

    遍历json显示树形菜单

    总结来说,"遍历json显示树形菜单"这个任务涵盖了JSON解析、递归遍历和DOM操作等多个核心概念。理解和掌握这些技术对于任何前端开发者都是至关重要的。在实际开发中,可能还需要考虑性能优化、异步加载、用户交互等...

    walkers:使用 htmlparser2 递归 DOM 遍历

    使用 htmlparser2 进行递归 DOM 遍历。 入门 安装模块: npm install walkers var walkers = require ( '../lib/walkers.js' ) ; var request = require ( 'request' ) ; var htmlparser = require ( "htmlparser2...

    .遍历DOM元素

    1. 避免使用`for...in`遍历DOM,因为它会遍历对象的所有可枚举属性,包括原型链上的属性。 2. 使用`NodeList`对象时,注意其非活集合特性,即在遍历过程中,如果DOM结构发生改变,遍历结果可能不准确。 3. 优化遍历...

    javascript先序遍历DOM树的方法

    DOM树由文档中的所有节点(元素节点、文本节点、注释节点等)所构成的一个树结构,DOM树的解析和构建是浏览器要实现的关键功能。既然DOM树是一个树结构,那么我们就可以使用遍历树结构的相关方法来对DOM树进行遍历,...

    05-遍历DOM树.md

    4. 使用递归和使用非递归(栈)遍历DOM树,哪一个更好,为什么? 深度优先遍历在代码上看起来更为简洁,递归逻辑清晰,但它的一个潜在问题是可能会导致`stackoverflow`错误,尤其是当DOM树的层级非常深时。为了避免...

    VC6中用DOM遍历网页中的元素.pdf

    在本文档中,"VC6中用DOM遍历网页中的元素"的讨论主要集中在如何在Microsoft Visual C++ 6.0(简称VC6)环境下使用DOM(文档对象模型)遍历和操作HTML网页中的元素,特别是表单和表单域。DOM是一种标准,允许程序和...

    JS 做的树形结构比较简单明了

    在JavaScript(JS)中,构建树形结构是一种常见的任务,特别是在网页交互和数据展示中。树形结构是一种数据组织方式,模拟自然界中的树状结构,其中每个元素(节点)可以有零个或多个子节点。这种结构使得数据的层次...

    jquery遍历节点树

    6. **$(selector).closest(selector)**: 这个方法会向上遍历DOM树,直到找到匹配给定选择器的第一个祖先元素。这对于查找最近的父级元素非常有用,比如寻找最近的表单元素。 在实际应用中,这些方法可以组合使用,...

    DOM应用---遍历网页中的元素

    本文将深入探讨如何使用JavaScript来遍历DOM树,并通过实际示例展示其在实际应用中的价值。 1. **理解DOM树** - DOM树是由文档的各个部分组成的,包括元素、属性、文本节点等。每个节点都有父节点、子节点和兄弟...

    树形结构生成javaScript

    本主题主要关注如何在JavaScript中生成和操作树形结构。以下是一些关键知识点: 1. **定义节点对象**:在JavaScript中,树的每个元素通常表示为一个对象,包含数据以及指向子节点的引用。例如: ```javascript ...

    dom4j解析 递归

    总结,DOM4J递归解析是处理复杂XML文档的有效手段,它允许我们逐层访问XML结构,并进行相应的操作。结合Eclipse的快捷键使用,可以进一步提高我们的编程效率。在实际项目中,理解并掌握这一技术,将使XML处理变得...

    JS操作XMLDOM(遍历和打印)

    - 使用递归遍历DOM树,收集每个节点的信息(如标签名、属性和内容)。 - 将收集的信息格式化为字符串,并调用`console.log`打印到浏览器控制台。 - 可能还包含了其他高级功能,如过滤特定类型的节点、颜色高亮关键...

    JavaScript实现的DOM树遍历方法详解【二叉DOM树、多叉DOM树】

    深度优先遍历指的是尽可能深地遍历DOM树的分支,直到该分支的末端,然后回溯到上一个节点并遍历另一个分支。这种方法通常用递归实现,但也可以用栈进行非递归实现。 ##### 广度优先遍历 广度优先遍历,又称作层次...

    tree_dom.zip

    综上所述,"tree_dom.zip"中的内容可能包含Java实现树形结构的递归和非递归遍历算法的示例代码。在实际开发中,我们需要根据具体需求和环境选择合适的遍历策略。对于大规模的树形结构,推荐使用非递归方法以提高效率...

    js树形结构例子

    - **渲染树**:将树结构显示在HTML中,可能使用DOM操作或模板引擎。 - **事件处理**:添加点击事件监听器,使得节点可被展开和折叠,可能使用`addEventListener`。 - **动画效果**:为了提高用户体验,可能会实现...

    js树形结构菜单

    优化策略包括虚拟DOM、缓存计算结果、分页加载和使用高效的遍历算法。 9. **可扩展性**: 设计模块化和可配置的API,使得树形菜单组件能适应不同的需求和样式。 10. **兼容性和响应式设计**: 考虑到跨平台和...

    javascript 树形结构

    在JavaScript中实现树形结构,可以使用递归函数进行遍历和操作,或者利用数据结构如队列或栈来辅助。`dtree`文件可能包含了这些功能的实现,比如提供了`addNode`, `removeNode`, `findNode`等方法。 使用这样的树形...

Global site tag (gtag.js) - Google Analytics