<?xml version= "1.0" encoding = "UTF-8">
<articles>
      <article category="xml">
             <title>XML概述</title>
             <author>Jerry</author>
             <email>jerry@yahoo.com</email>
             <date>2014-10-20</date>
      </article>
</articles>

DOM解析(DocumentObject Mode)是一种基于对象的API,它把XML的内容加载到内存中,生成一个与XML文档内容对应的对象模型。当解析完成后,内存中会生成一个对应的DOM树

XML解析只负责解析正确的XML,而不负责判断XML是否合法,如果不合法,会直接抛出解析异常

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

public class DomParser{

public static void main(String [] args){
      File xmlFile = new ("E:\\article.xml");
      DocumentBuilder builder = null;
      DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
      try{
             builder = builderFactory.newDocumentBuilder();
             Document document = builder.parse(xmlFile);
             Element root = document.getDocumentElement();
             System.out.println("根元素:"+root.getNodeName());
             NodeList childNodes = root.getChildNodes();
             for(int i =0;i<childNodes.getLength();i++){
                    Node node =childNodes.item(i);
                    if(“article”.equals(node.getNodeName())){
                           System.out.println("文章所属分类:"+node.getAttributes().getNamedItem("category").getNodeValue());
                           NodeListnodeDetail = node.getChildNodes();
                           for(intj=0;j< nodeDetail.getLength();j++){
                                  Nodedetail = nodeDetail.item(j);
                                  if("title".equals(detail.getNodeName()))
                                  System.out.println("标题:"+detail.getTextContenet());
                                  elseif("author".equals(detail.getNodeName()))
                                  System.out.println("作者:"+detail.getTextContenet());
                                  elseif("email".equals(detail.getNodeName()))
                                  System.out.println("电子邮件:"+detail.getTextContenet());
                                  elseif("date".equals(detail.getNodeName()))
                                  System.out.println("日期:"+detail.getTextContenet());
                           }
                    }
             }
      }catch(Exception e){
             e.printStackTrace();
      }
}
}

Node对象

Node     appendChild(Node newChild)

将节点 newChild 添加到此节点的子节点列表的末尾。

Node   cloneNode(booleandeep)

返回此节点的副本,即允当节点的一般复制构造方法。

short   compareDocumentPosition(Nodeother)

就节点在文档中的位置并按照文档的顺序,比较引用节点(即在其上调用此方法的节点)与作为参数传递的节点。

NamedNodeMap    getAttributes()

包含此节点的属性的NamedNodeMap(如果它是 Element);否则为 null。

String  getBaseURI()

此节点的绝对基 URI;如果实现不能获得绝对URI,则为 null。

NodeList    getChildNodes()

包含此节点的所有子节点的 NodeList。

Object       getFeature(Stringfeature, String version)

此方法返回一个特定的对象,该对象实现指定功能或版本的特定 API,如下所述。

Node   getFirstChild()

此节点的第一个子节点。

Node   getLastChild()

此节点的最后一个节点。

String  getLocalName()

返回此节点限定名称的本地部分。

String  getNamespaceURI()

此节点的名称空间 URI;如果它未被指定,则返回null(参见)。

Node   getNextSibling()

直接在此节点之后的节点。

String  getNodeName()

此节点的名称,取决于其类型;参见上表。

short   getNodeType()

表示基础对象的类型的节点,如上所述。

String  getNodeValue()

此节点的值,取决于其类型;参见上表。

Document getOwnerDocument()

与此节点相关的 Document 对象。

Node   getParentNode()

此节点的父节点。

String  getPrefix()

此节点的名称空间前缀;如果它未被指定,则为null。

Node   getPreviousSibling()

直接在此节点之前的节点。

String  getTextContent()

此属性返回此节点及其后代的文本内容。

Object       getUserData(Stringkey)

检索与此节点上的某个键相关联的对象。

boolean     hasAttributes()

返回此节点(如果它是一个元素)是否具有任何属性。

boolean     hasChildNodes()

返回此节点是否具有任何子节点。

Node   insertBefore(NodenewChild, Node refChild)

在现有子节点 refChild 之前插入节点newChild。

boolean     isDefaultNamespace(StringnamespaceURI)

此方法检查指定的 namespaceURI是否是默认名称空间。

boolean     isEqualNode(Nodearg)

测试两个节点是否相等。

boolean     isSameNode(Nodeother)

返回此节点是否是与给定节点相同的节点。

boolean     isSupported(Stringfeature, String version)

测试 DOM 实现是否实现特定功能,且该功能是否受此节点支持,如下所述。

String  lookupNamespaceURI(Stringprefix)

从此节点开始,查找与给定前缀相关的名称空间URI。

String  lookupPrefix(StringnamespaceURI)

从此节点开始,查找与给定名称空间 URI 相关的前缀。

void    normalize()

将此 Node 之下完整的深层子树中所有Text 节点(包括属性节点)放入只有结构(如元素、注释、处理指令、CDATA 节和实体引用)分隔 Text 节点的“常规”形式,也就是说,既没有相邻的 Text 节点,也没有空 Text 节点。

Node   removeChild(NodeoldChild)

从子节点列表中移除 oldChild 所指示的子节点,并将其返回。

Node   replaceChild(NodenewChild, Node oldChild)

将子节点列表中的子节点 oldChild 替换为 newChild,并返回 oldChild节点。

void    setNodeValue(StringnodeValue)

此节点的值,取决于其类型;参见上表。

void    setPrefix(Stringprefix)

此节点的名称空间前缀;如果未指定,则为null。

void    setTextContent(StringtextContent)

此属性返回此节点及其后代的文本内容。

Object       setUserData(Stringkey, Object data, UserDataHandler handler)

将对象与此节点上的键相关联。

Document对象

Node     adoptNode(Node source)

试图把另一文档中的节点采用到此文档。

Attr     createAttribute(Stringname)

创建给定名称的 Attr。

Attr     createAttributeNS(StringnamespaceURI, String qualifiedName)

创建给定的限定名称和名称空间 URI 的属性。

CDATASection   createCDATASection(Stringdata)

创建其值为指定字符串的CDATASection 节点。

Comment  createComment(Stringdata)

创建给定指定字符串的 Comment 节点。

DocumentFragment       createDocumentFragment()

创建空 DocumentFragment 对象。

Element     createElement(StringtagName)

创建指定类型的元素。

Element     createElementNS(StringnamespaceURI, String qualifiedName)

创建给定的限定名称和名称空间 URI 的元素。

EntityReference      createEntityReference(String name)

创建 EntityReference 对象。

ProcessingInstruction     createProcessingInstruction(String target, String data)

创建给定指定名称和数据字符串的ProcessingInstruction 节点。

Text    createTextNode(Stringdata)

创建给定指定字符串的 Text 节点。

DocumentType getDoctype()

与此文档相关的文档类型声明(参见DocumentType)。

Element     getDocumentElement()

这是一种便捷属性,该属性允许直接访问文档的文档元素的子节点。

String  getDocumentURI()

文档的位置,如果未定义或 Document是使用 DOMImplementation.createDocument 创建的,则为 null。

DOMConfiguration getDomConfig()

调用Document.normalizeDocument() 时使用的配置。

Element     getElementById(StringelementId)

返回具有带给定值的 ID 属性的 Element。

NodeList    getElementsByTagName(Stringtagname)

按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList。

NodeList    getElementsByTagNameNS(StringnamespaceURI, String localName)

以文档顺序返回具有给定本地名称和名称空间URI 的所有 Elements 的 NodeList。

DOMImplementation    getImplementation()

处理此文档的DOMImplementation 对象。

String  getInputEncoding()

指定解析时此文档使用的编码的属性。

boolean     getStrictErrorChecking()

指定是否强制执行错误检查的属性。

String  getXmlEncoding()

作为 XML 声明的一部分,指定此文档编码的属性。

boolean     getXmlStandalone()

作为 XML 声明的一部分,指定此文档是否为独立文档的属性。

String  getXmlVersion()

作为 XML 声明 的一部分指定此文档版本号的属性。

Node   importNode(NodeimportedNode, boolean deep)

从另一文档向此文档导入节点,而不改变或移除原始文档中的源节点;此方法创建源节点的一个新副本。

void    normalizeDocument()

此方法的行为如同使文档通过一个保存和加载的过程,而将其置为 "normal(标准)" 形式。

Node   renameNode(Noden, String namespaceURI, String qualifiedName)

重命名 ELEMENT_NODE 或ATTRIBUTE_NODE 类型的现有节点。

void    setDocumentURI(StringdocumentURI)

文档的位置,如果未定义或 Document是使用 DOMImplementation.createDocument 创建的,则为 null。

void    setStrictErrorChecking(booleanstrictErrorChecking)

指定是否强制执行错误检查的属性。

void    setXmlStandalone(booleanxmlStandalone)

作为 XML 声明 的一部分指定此文档是否是单独的的属性。

void    setXmlVersion(StringxmlVersion)

作为 XML 声明 的一部分指定此文档版本号的属性。

Attr对象

String    getName()

返回此属性的名称。

Element     getOwnerElement()

此属性连接到的 Element 节点;如果未使用此属性,则为 null。

TypeInfo    getSchemaTypeInfo()

与此属性相关联的类型信息。

boolean     getSpecified()

如果在实例文档中显式给此属性一个值,则为True;否则为 false。

String  getValue()

检索时,该属性值以字符串形式返回。

boolean     isId()

返回是否此属性属于类型 ID(即包含其所有者元素的标识符)。

void    setValue(Stringvalue)

检索时,该属性值以字符串形式返回。

DocumentType对象

NamedNodeMap      getEntities()

包含在 DTD 中声明的内部和外部常规实体的 NamedNodeMap。

String  getInternalSubset()

以字符串表示的内部子集,如果没有内部子集,则为 null。

String  getName()

DTD 的名称;即紧跟在 DOCTYPE 关键字后面的名称。

NamedNodeMap    getNotations()

包含在 DTD 中声明的表示法的NamedNodeMap。

String  getPublicId()

外部子集的公共标识符。

String  getSystemId()

外部子集的系统标识符。

Element对象

String    getAttribute(String name)

通过名称获得属性值。

Attr     getAttributeNode(Stringname)

通过名称获得属性节点。

Attr     getAttributeNodeNS(StringnamespaceURI, String localName)

通过本地名称和名称空间 URI 获得 Attr 节点。

String  getAttributeNS(StringnamespaceURI, String localName)

通过本地名称和名称空间 URI 获得属性值。

NodeList    getElementsByTagName(Stringname)

以文档顺序返回具有给定标记名称的所有后代Elements 的 NodeList。

NodeList    getElementsByTagNameNS(StringnamespaceURI, String localName)

以文档顺序返回具有给定本地名称和名称空间URI 的所有后代 Elements 的 NodeList。

TypeInfo    getSchemaTypeInfo()

与此元素相关的类型信息。

String  getTagName()

元素的名称。

boolean     hasAttribute(Stringname)

当具有给定名称的属性在此元素上被指定一个值或具有默认值时,返回 true;否则返回 false。

boolean     hasAttributeNS(StringnamespaceURI, String localName)

当具有给定本地名称和名称空间 URI 的属性在此元素上被指定一个值或具有默认值时,返回 true;否则返回 false。

void    removeAttribute(Stringname)

通过名称移除一个属性。

Attr     removeAttributeNode(AttroldAttr)

移除指定的属性节点。

void    removeAttributeNS(StringnamespaceURI, String localName)

通过本地名称和名称空间 URI 移除属性值。

void    setAttribute(Stringname, String value)

添加一个新属性。

Attr     setAttributeNode(AttrnewAttr)

添加新的属性节点。

Attr     setAttributeNodeNS(AttrnewAttr)

添加新属性。

void    setAttributeNS(StringnamespaceURI, String qualifiedName, String value)

添加新属性。

void    setIdAttribute(Stringname, boolean isId)

如果参数 isId 为 true,则此方法将指定的属性声明为用于确定用户的 ID 属性。

void    setIdAttributeNode(AttridAttr, boolean isId)

如果参数 isId 为 true,则此方法将指定的属性声明为用户确定的 ID 属性。

void    setIdAttributeNS(StringnamespaceURI, String localName, boolean isId)

如果参数 isId 为 true,则此方法将指定的属性声明为用户确定的 ID 属性。

NamedNodeMap对象

int  getLength()

此映射中的节点数。

Node   getNamedItem(Stringname)

检索通过名称指定的节点。

Node   getNamedItemNS(StringnamespaceURI, String localName)

检索通过本地名称和名称空间 URI 指定的节点。

Node   item(intindex)

返回映射中第 index 个项。

Node   removeNamedItem(Stringname)

移除通过名称指定的节点。

Node   removeNamedItemNS(StringnamespaceURI, String localName)

移除通过本地名称和名称空间 URI 指定的节点。

Node   setNamedItem(Nodearg)

使用 nodeName 属性添加节点。

Node   setNamedItemNS(Nodearg)

使用其 namespaceURI 和 localName 添加节点。

NodeList对象

int  getLength()

列表中的节点数。

Node   item(intindex)

返回集合中的第 index 个项。

XML之DOM解析模型的更多相关文章

  1. Java XML DOM解析范例源码

    下边内容内容是关于Java XML DOM解析范例的内容.import java.io.InputStream; import java.util.ArrayList; import java.uti ...

  2. xml语法、DTD约束xml、Schema约束xml、DOM解析xml

    今日大纲 1.什么是xml.xml的作用 2.xml的语法 3.DTD约束xml 4.Schema约束xml 5.DOM解析xml 1.什么是xml.xml的作用 1.1.xml介绍 在前面学习的ht ...

  3. mybatis源码-解析配置文件(一)之XML的DOM解析方式

    目录 简介 Java 中 XML 文件解析 解析方式 DOM 解析 XML 新建 XML 文件 DOM 操作相关类 Java 读取 XML 文件 一起学 mybatis @ 简介 在之前的文章< ...

  4. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  5. 使用jaxp对比xml进行DOM解析

    /*DOM解析编程 •遍历所有节点 •查找某一个节点 •删除结点 •更新结点 •添加节点 /* package cn.itcast.jaxp; import java.io.File; import ...

  6. XML之SAX解析模型

    DOM解析会把整个XML文件全部映射成Document里的树形结构,当遇到比较大的文件时,它的内存占用很大,查找很慢 SAX就是针对这种情况出现的解决方案,SAX解析器会从XML文件的起始位置起进行解 ...

  7. java解析XML之DOM解析和SAX解析(包含CDATA的问题)

    Dom解析功能强大,可增删改查,操作时会将XML文档读到内存,因此适用于小文档: SAX解析是从头到尾逐行逐个元素解析,修改较为不便,但适用于只读的大文档:SAX采用事件驱动的方式解析XML.如同在电 ...

  8. 【文件处理】xml 文件 DOM解析

    一.Java解析xml.解析xml四种方法.DOM.SAX.JDOM.DOM4j.XPath 此文针对其中的DOM方法具体展开介绍及代码分析 sax.dom是两种对xml文档进行解析的方法(没有具体实 ...

  9. XML之DOM解析文档 Day24

    TestDom.java package com.sxt.dom; import java.io.File; import java.io.IOException; import javax.xml. ...

随机推荐

  1. ●BZOJ 3545 [ONTAK2010]Peaks(离线)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3545 http://www.lydsy.com/JudgeOnline/problem.ph ...

  2. java 之 MyBatis(sql 可以执行,在eclipse执行报错问题)

    前段时间写 mybatis Sql 查询语句的时候,发现一个很奇怪的现象,我写的SQL 语句在 pl/Sql 中明明可以执行,但是放到 eclipse 中执行却报错,因为时间比较久,依稀记得是文字与字 ...

  3. C# 枚举在项目中使用心得

    阅读目录 基本介绍 使用注意 使用方法 扩展用法     本文主要是我在项目中对C#枚举的使用心得,如有不足的地方欢迎您指出. 一.基本介绍  枚举是由一组特定常量构成的一组数据结构,是值类型的一种特 ...

  4. 阿里Java研发工程师实习面经

    十分幸运 拿到阿里云的offer,感谢周围无数人对我的支持和鼓励,所以写篇面经希望可以帮助大家. 面试中,运气占很大一部分的,所以你们若是没有通过,一定不要气馁,继续加油. 每个努力的人 都值得钦佩, ...

  5. Maven之自定义archetype生成项目骨架

    Maven之自定义archetype生成项目骨架(一) http://blog.csdn.net/sxdtzhaoxinguo/article/details/46895013

  6. 如何为分布式系统优雅的更换RPC

    为啥需要更换RPC? 很多小伙伴都遇到过需要为分布式系统调用更换RPC的问题,为什么会遇到这种事呢?其实,在系统搭建初期,需求简单,架构简单,最重要的是请求量也少,所以很多系统都采用快速原型开发模式, ...

  7. 点(x1, y1)关于点(x0, y0)逆时针旋转a度后的坐标求解

    问题描述: 求点(x1, y1)关于点(x0, y0)逆时针旋转a度后的坐标 思路: 1.首先可以将问题简化,先算点(x1, y1)关于源点逆时针旋转a度后的坐标,求出之后加上x0,y0即可. 2.关 ...

  8. WUOJ-ACM :1003: 零起点学算法78——牛牛

    武汉科技大学ACM :1003: 零起点学算法78--牛牛Problem Description牛牛是一种纸牌游戏,总共5张牌,规则如下: 如果找不到3张牌的点数之和是10的倍数,则为没牛: 如果其中 ...

  9. 通过AIDL在两个APP之间Service通信

    一.项目介绍 [知识准备] ①Android Interface definition language(aidl,android接口定义语言),其目的实现跨进程的调用.进程是程序在os中执行的载体, ...

  10. 文件上传,服务端压缩文件方法,重点是png与gif图片的压缩,保证了透明度与动画

    /// <summary> /// 上传文件帮助类 /// </summary> public class ImageUploadHelper { #region SaveVi ...