DOM单步调试文档

转载 2006年06月07日 14:13:00

获取根元素

 一旦解析了文档并创建了一个 Document,应用程序就能单步调试该结构以审核、查找或显示信息。这种导航功能是将要在 Document 上执行的许多操作的基础。

对文档的单步调试首先从根元素开始。格式良好的文档仅有一个根元素,也称为 DocumentElement。应用程序首先检索这个元素。

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.File;
import org.w3c.dom.Document;

import org.w3c.dom.Element;

public class OrderProcessor {
...
         System.exit(1);
      }
      
      //STEP 1:  Get the root element

      Element root = doc.getDocumentElement();
      System.out.println("The root element is " + root.getNodeName());

   }
}

编译和运行这个应用程序将输出根元素的名称。

获取节点的孩子

一旦应用程序确定了根元素,它就把根元素的孩子的列表作为一个 NodeList 来检索。NodeList 类是一系列的项,应用程序将逐个迭代这些项。

...

import org.w3c.dom.NodeList;

...
   //STEP 1:  Get the root element
   Element root = doc.getDocumentElement();
   System.out.println("The root element is "+root.getNodeName());
      
   //STEP 2:  Get the children
   NodeList children = root.getChildNodes();
   System.out.println("There are "+children.getLength()
                                  +" nodes in this document.");
                                  
 }
}
父子和兄弟关系提供了迭代某个节点的所有孩子的替代方法,它在某些场合下可能更为适宜,比如在这些关系和孩子
的出现顺序对理解数据至关重要的时候。
 循环首先从根元素的第一个孩子开始。 应用程序迭代第一个孩子的所有兄弟,直至已全部对它们求值。

每次应用程序执行该循环,它都要检索一个 Node 对象,输出其名称和值。注意 orders 的五个孩子包
order 元素和三个文本节点。还要注意元素具有一个 null 值,而不是预期的文本。包含实际内容作
为其值的,是作为元素的孩子的文本节点。

...
import org.w3c.dom.Node;

...
      
      //STEP 3:  Step through the children
      for (Node child = root.getFirstChild(); 
          child != null;
          child = child.getNextSibling())
      {
         System.out.println(start.getNodeName()+" = " 
                                       +start.getNodeValue());
      }

   }
}
...

使用 getFirstChild() 和 getNextSibling() 中的代码显示了第一层孩子,但那远远不是整个文档
。为了看到所有元素,必须将前一个例子中的功能转换为一个方法并递归地调用。

应用程序首先从根元素开始,向屏幕打印名称和值。然后应用程序就像以前一样遍历根元素的每个
孩子。但是对于每个孩子,应用程序还会遍历该孩子的每个孩子,即检查根元素的所有孩子和孙子。

...
public class OrderProcessor {
   
   private static void stepThrough (Node start)
   {

      System.out.println(start.getNodeName()+" = "+start.getNodeValue());   

      for (Node child = start.getFirstChild(); 
          child != null;
          child = child.getNextSibling())
      {
            stepThrough(child);

      }
   }


   public static void main (String args[]) {
      File docFile = new File("orders.xml");
      
...     
      System.out.println("There are "+children.getLength()
                            +" nodes in this document.");

      //STEP 4:  Recurse this functionality
      stepThrough(root);

   }
}

到目前为止,所编写的 stepThrough() 方法能够遍历大多数类型的节点,但是它完全地遗漏了属性
,因为属性不是任何节点的孩子。为了显示属性,可修改 stepThrough() 来检查元素节点的属性。

下面修改过的代码检查每个节点的输出,通过将节点的 nodeType 与常量 ELEMENT_NODE 作比较
,从而确定它是否为一个元素。 Node 对象带有成员常量,它们表示每种类型的节点,比如
ELEMENT_NODEATTRIBUTE_NODE。 如果 nodeTypeELEMENT_NODE 匹配,它就
是一个元素。

对于找到的每个元素,应用程序都会创建一个包含该元素的所有属性的 NamedNodeMap。应用程序能
够迭代 NamedNodeMap,打印每个属性的名称和值,就像它迭代 NodeList 一样。

...
import org.w3c.dom.NamedNodeMap;

...
private static void stepThroughAll (Node start)
   {
      System.out.println(start.getNodeName()+" = "+start.getNodeValue());   
         
      if (start.getNodeType() == start.ELEMENT_NODE) 
      {   
          NamedNodeMap startAttr = start.getAttributes();
          for (int i = 0; 
               i < startAttr.getLength();
               i++) {
             Node attr = startAttr.item(i);
             System.out.println("  Attribute:  "+ attr.getNodeName()
                                          +" = "+attr.getNodeValue());
          }   
      } 

      
      for (Node child = start.getFirstChild(); 
          child != null;
          child = child.getNextSibling())
      {
         stepThroughAll(child);
      }
   }

认识DOM以及DOM加载过程

,众所周知是文档对象模型。这其中文档是什么呢?对象模型是什么?针对的对象是哪些? 其实可以把网页看做是一种文档,而且是有结构的文档。 其次,网页中的各种标记或者叫做标签,可以映射成我们所谓...
  • u014649089
  • u014649089
  • 2014年04月12日 09:14
  • 2315

DOM(文档对象模型) 概念

DOM: Document Object Model 文档对象模型                主要用来将标记型文档(html,xml)封装成对象,并将标记型文档中的所有内容(标签、文本、属性等)都...
  • wangjian_an
  • wangjian_an
  • 2016年06月06日 12:39
  • 607

jquery源码解析----DOM文档加载步骤

//jquery中ready和load事件 jquery有3种针对文档加载的方法: $(document).ready(function(){ //代码逻辑 } ) //document read...
  • u010585120
  • u010585120
  • 2016年09月12日 13:37
  • 483

js操作dom文档大全

dom节点操作是经常要用到的东东,所以今天在网上搜集备用。 注意大小写一定不能弄错. 属性: 01 Attributes 存储节点的属性列表(只读) 02 c...
  • business122
  • business122
  • 2012年11月05日 08:36
  • 1239

文档对象模型DOM概述及DOM树

DOM技术 1.Dom概述? * 什么是DOM?  docuemnt object model 文档对象模型 * 它的作用?   重构整个 HTML 文档。您可以添加、移除、改变或重排页面上的项目 *...
  • CSDN_GIA
  • CSDN_GIA
  • 2016年11月28日 14:27
  • 516

遍历DOM文档树

一 介绍 遍历文档树通过使用parentNode属性、firstChild属性、lastChild属性、previousSibling属性和nextSibling属性来实现。 1、parentNo...
  • chengqiuming
  • chengqiuming
  • 2017年04月12日 10:44
  • 280

DOM文档加载顺序及readyState的状态

readyState共有四种状态,分别是: uninitialized:未开始加载 loading:载入中 interactive:已加载并可与用户交互 complete:全部加载完成 DOM文档加...
  • luofeng457
  • luofeng457
  • 2017年04月17日 13:23
  • 354

javascript dom-文档结构和遍历

1 作为节点树的文档 Node属性:     parentNode、childNodes、firstChild、lastChild、nextSibling、previoursSibling...
  • wang19yan89
  • wang19yan89
  • 2017年03月14日 20:24
  • 153

《JavaScript学习笔记》:DOM_添加节点、删除节点、文档碎片

《JavaScript学习笔记》:DOM_添加节点、删除节点、文档碎片在上篇博文中,主要介绍了关于DOM中获取子节点的相关知识点,除了获取子节点,DOM还有创建一个节点、加入节点、删除节点等知识点,本...
  • u010412719
  • u010412719
  • 2016年05月31日 19:56
  • 796

JS——文档对像模型DOM

什么是dom? dom不是javascript,dom是文档。 dom是一组用来描述脚本怎么与结构化文档进行交互和访问的web标准。 dom定义了一系列对象、方法和属性,用于访问、操作和创建文档...
  • culous
  • culous
  • 2016年09月17日 23:08
  • 252
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:DOM单步调试文档
举报原因:
原因补充:

(最多只允许输入30个字)