DOM解析

来源:互联网 发布:linux空间扩容 编辑:程序博客网 时间:2024/05/20 18:19

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口。

DOM实际上是以面向对象方式描述的文档模型。

DOM的优势主要表现在:易用性强,使用DOM时,将把所有的XML文档信息都存于内存中,并且遍历简单,支持XPath,增强了易用性。

DOM的缺点主要表现在:效率低,解析速度慢,内存占用量过高,对于大文件来说几乎不可能使用。另外效率低还表现在大量的消耗时间,

因为使用DOM进行解析时,将为文档的每个element、attribute、processing-instrUCtion和comment都创建一个对象,

这样在DOM机制中所运用的大量对象的创建和销毁无疑会影响其效率。

实列:

public class test1 {

public static void main(String[] args) throws Exception {

//1:获取DOM解析工厂(作用是用于创建具体的解析器)

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

//2,获取具体的解析器

DocumentBuilder db=dbf.newDocumentBuilder();

//3, 解析一个xml文档 ,获取Document(根节点)

Document document=db.parse(new File(“students.xml”)); //将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象。

// NodeList接口提供对节点的有序集合的抽象

NodeList nodelist=document.getElementsByTagName_r(“student”); //按文档顺序返回包含在文档中且具有给定标记名称的所有 Element 的 NodeList

System.out.println(nodelist.getLength());

for(int i=0;i

Element element=(Element) nodelist.item(i);

String value=element.getElementsByTagName_r(“name”).item(0).getFirstChild().getNodeValue();

System.out.println(value);

}

}

}

String value=element.getElementsByTagName_r(“name”)//以文档顺序返回具有给定本地名称和名称空间 URI 的所有后代 Elements 的 NodeList。

String value=element.getElementsByTagName_r(“name”).item(0).//返回集合中的第 index 个项。如果 index 大于或等于此列表中的节点数,则返回 null。

这里返回的是第一个节点则是Node

String value=element.getElementsByTagName_r(“name”).item(0).getFirstChild().//此节点的第一个子节点。如果没有这样的节点,则返回 null。

String value=element.getElementsByTagName_r(“name”).item(0).getFirstChild().getNodeValue();// 此节点的值

下面这个实列还介绍 了如何获取属性内容以及注释

获取属性时都是返回的一个:NamedNodeMap 集合

Attr 表示 Element 对象中的属性

public class test3 {

public static void main(String[] args) throws Exception {

DocumentBuilderFactory dbf =DocumentBuilderFactory.newInstance();

DocumentBuilder db=dbf.newDocumentBuilder();

Document document=db.parse(new File(“score.xml”));

Element root=document.getDocumentElement();

//解析元素

parseElement(root);

}

public static void parseElement(Element element){

//获取元素名称

String tagName=element.getTagName();

//获取子节点

NodeList list=element.getChildNodes();

//获取元素的属性

NamedNodeMap map= element.getAttributes();

System.out.print(“<”+tagName);

//如果元素存在属性

if(map.getLength()>0){

for(int i=0;i

//获取每一个属性

Attr attr=(Attr) map.item(i); // Attr 表示 Element 对象中的属性

String attrName=attr.getName();

String attrValue=attr.getValue();

System.out.print(” “+attrName+”=\”“+attrValue+”\”“);

}

}

System.out.print(“>”);

for(int i=0;i

Node node=list.item(i);

//如果是元素

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

parseElement((Element)node);

}else if(node.TEXT_NODE==node.getNodeType()){

//如果是文本

System.out.print(node.getNodeValue());

}else if(node.COMMENT_NODE==node.getNodeType()){

//如果是注释信息

System.out.print(” “);

}else{

System.out.println(“未完全解析。。。。。。”);

}

}

System.out.println(“

0 0
原创粉丝点击