zoukankan      html  css  js  c++  java
  • 元素(Element)和结点(Node)的区别(org.w3c.dom)

    1.元素(Element)和结点(Node)的区别,
    元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如


    但是一个结点不一定是一个元素,而一个元素一定是一个结点。

    什么是node:

    NODE是相对TREE这种数据结构而言的。TREE就是由NODE组成。这个部分你可以参考离散数学的树图。
    node有几个子类型:
    Element, Text, Attribute, RootElement, Comment, Namespace等

    什么是element

    ELEMENT则是XML里的概念,例如就是元素,是XML中的数据的组成部分之一。
    Element是可以有属性和子节点的node。
    例如 test,有文本子节点。test,有属性和test文本子节点。也是元素。也是元素。

    Element是从Node继承的

    素(Element)和结点(Node)的区别,
    元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如

    。但是一个结点不一定是一个元素,而一个元素一定是一个结点。

    DOM将文档中的所有都看作节点 node>element

    1DOM在解析文档的时候按整个文档的结构生成一棵树,全部保存在内存

    优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作;缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理。
    2一个需要注意的地方就是,XML文档两个标签之间的空白也是这棵树的一个节点(Text节点)。 a有三个节点

    Element root = doc.getDocumentElement();:root是什么???? 当然既是元素又是节点了,因为元素一定是节点

    NodeList list = root.getChildNodes(); :节点数目要比元素数目多。因为

    node有几个子类型:

    Element,
    
      Text,
    
    Attribute,
    

    RootElement,

    Comment,
    
    Namespace等
    

    Element是可以有属性和子节点的node。

    Element是从Node继承的

    //转换

    if (node.getNodeType() == Element.ELEMENT_NODE)

    {
    Element e = (Element) node;

    }

    元素有孩子吗

    elemen et 性质

    1 e.getAttributes()
    2 e.getChildNodes()

    3 e.getTagName()

    Element root = doc.getDocumentElement();
    NodeList list = root.getChildNodes();
    ······················································

    public void domParse(String fileName) throws Exception {
    DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = f.newDocumentBuilder();//builder
    Document docment = db.parse(new File(fileName));//parese

    Element el = docment.getDocumentElement();//root
    domRead(el);

    }

    public void domRead(Element currentNode) {
    if (“struts-config”.equals(currentNode.getNodeName())) {
    config = new StrutsConfig();
    }

    NodeList list = currentNode.getChildNodes();
    for (int i = 0; i < list.getLength(); i++) {
    Node node = list.item(i);
    if (node.getNodeType() == Element.ELEMENT_NODE) {
    Element e = (Element) node;

    if ("form-beans".equals(e.getTagName())) {
     formBeans = new ArrayList<FormBeanConfig>();
     domRead(e);
    }
    if ("form-bean".equals(e.getTagName())) {
     FormBeanConfig fc = new FormBeanConfig();
     NamedNodeMap attrs = e.getAttributes();
    
     for (int j = 0; j < attrs.getLength(); j++) {
      Attr attr = (Attr) attrs.item(j);
      if ("name".equals(attr.getName())) {
       fc.setName(attr.getValue());
      } else {
       fc.setType(attr.getValue());
      }
     }
     formBeans.add(fc);
    }
    if ("action-mapping".equals(e.getTagName())) {
     actions = new ArrayList<ActionConfig>();
     domRead(e);
    }
    if ("action".equals(e.getTagName())) {
     ActionConfig ac = new ActionConfig();
     NamedNodeMap attrs = e.getAttributes();
     for (int k = 0; k < attrs.getLength(); k++) {
      Attr attr = (Attr) attrs.item(k);
      if ("path".equals(attr.getName())) {
       ac.setPath(attr.getValue());
      } else if ("type".equals(attr.getName())) {
       ac.setType(attr.getValue());
      } else {
       ac.setName(attr.getValue());
      }
     }
    
     actions.add(ac);
    }
    

    }
    }
    }

  • 相关阅读:
    用番茄工作法提升工作效率 (二)用番茄钟实现劳逸结合(简单到不可相信)
    Scratch少儿编程系列:(九)音乐高级技巧
    Scratch少儿编程系列:(八)演奏简单音乐
    BOM (字节顺序标记)
    获取 / 设置 进程的工作目录(当前目录)
    内存对齐
    WPF 透明窗体
    C# 调用 C++ 的 DLL 返回值为 bool 时,值混乱
    WPF ListView / ListBox 更新绑定数据源时,自动刷新界面显示
    正则表达式——WPF输入控件TextBox 限定输入特定字符
  • 原文地址:https://www.cnblogs.com/mrcharles/p/4731754.html
Copyright © 2011-2022 走看看