文档对象模型(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(“