您的位置:首页 > 编程语言 > Java开发

XML技术2-文件解析

2016-06-04 18:10 399 查看
1、XML文件解析:DOM和SAX

DOM和SAX是解析技术,是一堆接口和规范。要真正解析XML文件还需要解析器。

解析器:

对解析技术进行实现,是一堆针对java的api

jaxp     dom4j    jdom

目前最流行,最受欢迎的是dom4j,因为其功能比较强大

方式一DOM:

DOM解析技术是将整个XML文件读入内存并封装成document对象,因此,dom技术能实现对XML文件的修改。

如果文件过大可能会造成内存溢出

方式二SAX:

SAX技术在解析XML文件时,是一行一行读取,当读取到开始标签时,他会进行通知,读到结束标签时这期间所读的内容就会消失,并不会保存。所以他不能对XML文件进行修改。相对于DOM技术来说比较局限。

2、使用jaxp解析XML:

jaxp是javaSE的一部分

它在java的javax.xml.parsers包中。

javax.xml.parsers包里面有四个类,分别是分别是针对DOM和SAX解析的类并且是abstract类,也就是抽象类,说白了就是不能new一个对象。

DOM解析:

基本步骤:

创建解析器工厂类的对象,通过解析器工厂类对象的newDocumentBuilder()方法得到解析器类的对象

通过解析器类的对象得到XML文件的Document对象。之后就可以对XML文件进行操作。

下面代码就是对XML文件的增、删、改、查以及如何遍历XML文件节点的操作。

package com.ly.dom.jaxp;

import javax.sql.rowset.spi.XmlWriter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class TextDom {

public static void main(String[] args)throws Exception {
//selectAll();
//addSex();
//modifySex();
//deleteSex();
listNode();
}

//遍历节点
public static void listNode()throws Exception{
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/student.xml");

listAll(document);
}

private static void listAll(Node node) {
if(node.getNodeType()==Node.ELEMENT_NODE)
{
System.out.println(node.getNodeName());
}
NodeList list=node.getChildNodes();
for(int i=0;i<list.getLength();i++)
{
Node node1=list.item(i);
listAll(node1);
}
}

//删除sex标签
public static void deleteSex()throws Exception{
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/student.xml");

NodeList sexList=document.getElementsByTagName("sex");
Node sex=sexList.item(0);
Node sexParent=sex.getParentNode();
sexParent.removeChild(sex);

TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/student.xml"));
}

//修改sex的值
public static void modifySex()throws Exception{
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/student.xml");

NodeList idList=document.getElementsByTagName("sex");
Node sex=idList.item(0);
sex.setTextContent("female");

TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/student.xml"));
}

//增加sex标签
public static void addSex()throws Exception{
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/student.xml");

NodeList idList=document.getElementsByTagName("id");
Node id1=idList.item(0);
Element sex=document.createElement("sex");
Text text=document.createTextNode("male");
sex.appendChild(text);
id1.appendChild(sex);

//回显
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/student.xml"));
}

//查询所有name
public static void selectAll() throws Exception {
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/student.xml");

NodeList nameList=document.getElementsByTagName("name");
for(int i=0;i<nameList.getLength();i++)
{
Node name=nameList.item(i);
String s=name.getTextContent();
System.out.println(s);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息