xml解析-jaxp之dom解析

package day06_parser.dom;
/**
* xml的解析技术:JAXP是Java API for XML Processing的英文字头缩写,
* 中文含义是:用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。
* 以下我们研究两种解析方式:
* 1.dom解析 2.sax解析:Simple API for XML
* 以下是dom解析的实例。 * JAXP-DOM解析实例:
* 以下的实例实现的功能是,通过javax.xml包实现dom方式的xml的解析
* 详细的操作有添加节点,删除节点,改动节点内容,查询节点信息
*/ import java.io.File;
import javax.xml.parsers.*;
import javax.xml.transform.*;
import javax.xml.transform.dom.*;
import javax.xml.transform.stream.StreamResult;
import org.junit.Test;
import org.w3c.dom.*; public class DOMCURD { //可以用junit測试工具的方法进行測试
public static void main(String[] args) throws Exception{
demo05();
}
//获取和解析器关联的Document对象
@Test
public static void demo01() throws Exception{
//==============获得document==========================
//1.获得工厂
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
//2.获得解析器
DocumentBuilder builder=factory.newDocumentBuilder();
//3.依据解析器获取Document对象
@SuppressWarnings("unused")
Document document=builder.parse(new File("db.xml"));
}
//查询
public static void demo02() throws Exception{
//1.获得document
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
//2.获得根元素--books(可以省略)
@SuppressWarnings("unused")
Element rootElement=document.getDocumentElement(); //3.获取全部的book元素。属性id
NodeList allBookElements=document.getElementsByTagName("book");
//4遍历book元素----本实例db.xml中有两个book元素
for(int i=0;i<allBookElements.getLength();i++){
Element childNode=(Element)allBookElements.item(i);
System.out.println(i);
//4.1获取book元素的id属性
String id=childNode.getAttribute("id");
System.out.println("###id:"+id);
System.out.println(childNode.getNodeName());
//4.2获取book元素下的子节点
NodeList childNodeList=childNode.getChildNodes();
//注意文本也是节点,所以回车换行的部分会是文本,也会加入到上面定义的childNodeList中
//遍历
for(int j=0;j<childNodeList.getLength();j++)
{
//做推断-是否是非文本节点
Node childNode2=childNodeList.item(j);
//有两种方式推断是否一定是元素
//================方法1=========================
if(childNode2.getNodeType()==Node.ELEMENT_NODE)
{
//获取标签的名称
System.out.print(childNode2.getNodeName());
System.out.println(":");
//获取元素标签的内容
System.out.println(childNode2.getTextContent());
}
//===============方法2==========================
if(childNode2 instanceof Element)
{//...........}
//=============================================
}
} }
}
//添加
public static void demo03() throws Exception{
//获取doument对象-dom方式
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
//获取根元素
Element rootElement=document.getDocumentElement();
//创建新元素,不要以为是rootElement创建的哦,Document创建。用appendchild()关联
Element bookElement=document.createElement("book");
//为元素创建id属性
bookElement.setAttribute("id", "b0003");
//为book元素创建子元素
Element newTitleElement=document.createElement("title");
newTitleElement.setTextContent("Flex开发");
Element newPriceElement=document.createElement("price");
newPriceElement.setTextContent("98");
Element newAuthorElement=document.createElement("author");
newAuthorElement.setTextContent("胡玉勉");
bookElement.appendChild(newTitleElement);
bookElement.appendChild(newPriceElement);
bookElement.appendChild(newAuthorElement);
//将book加入到根节点rootElement下
rootElement.appendChild(bookElement);
//=======将创建好了新元素的document更新到原来的文件里=====
//运用javax.transform技术
TransformerFactory tformFactory=TransformerFactory.newInstance();
//transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
Transformer transformer=tformFactory.newTransformer();
//这里面的參数不用rootElement,用document
Source xmlSource=new DOMSource(document);
Result outputTarget=new StreamResult(new File("db.xml"));
transformer.transform(xmlSource, outputTarget);
}
//删除-通过父节点删除子节点
@SuppressWarnings("unused")
public static void demo04() throws Exception{
//获取document
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
//获取根元素
Element rootElement=document.getDocumentElement();
//删除某一个book元素,比方id为“b003”
//1.获取id为“b003”的元素
NodeList allBookElement = document.getElementsByTagName("book");
for(int m = 0 ; m < allBookElement.getLength() ; m ++){
Element bookElement = (Element) allBookElement.item(m);
String id = bookElement.getAttribute("id");
if("b0003".equals(id)){
//注意删除节点的时候,应遵循由自己找到父节点。然后通过父节点删除
bookElement.getParentNode().removeChild(bookElement);
}
}
//=======将删除了的document更新到原来的文件里=====
//运用javax.transform技术:Transformer此抽象类的实例可以将源树转换为结果树
TransformerFactory tformFactory=TransformerFactory.newInstance();
//transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
Transformer transformer=tformFactory.newTransformer();
//这里面的參数不用rootElement。用document
Source xmlSource=new DOMSource(document);
Result outputTarget=new StreamResult(new File("db.xml"));
transformer.transform(xmlSource, outputTarget);
}
//改动
@SuppressWarnings("unused")
public static void demo05() throws Exception{
//获取document
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document document=builder.parse(new File("db.xml"));
Element rootElement=document.getDocumentElement();
//获取元素进行改动
NodeList bookNodeList=document.getElementsByTagName("book");
//遍历,对id=“b002”的book元素进行改动
for(int i=0;i<bookNodeList.getLength();i++){
Element bookNode=(Element)bookNodeList.item(i);
String id=bookNode.getAttribute("id");
if("b002".equals(id)){
//获取元素的子节点进行改动
NodeList childNodeList=bookNode.getChildNodes();
for(int j=0;j<childNodeList.getLength();j++){
Node bookChildNode=childNodeList.item(j);
System.out.println(bookChildNode.getNodeName());
bookChildNode.setTextContent("改动了节点的文本内容");
System.out.println(bookChildNode.getTextContent());
}
}
}
//记住别忘了回写到xml文件里
//=======将删除了的document更新到原来的文件里=====
//运用javax.transform技术:Transformer此抽象类的实例可以将源树转换为结果树
TransformerFactory tformFactory=TransformerFactory.newInstance();
//transform(Source xmlSource, Result outputTarget)
//将 XML Source 转换为 Result。
Transformer transformer=tformFactory.newTransformer();
//这里面的參数不用rootElement,用document
Source xmlSource=new DOMSource(document);
Result outputTarget=new StreamResult(new File("db.xml"));
transformer.transform(xmlSource, outputTarget);
}
}

上一篇:jquery经验1


下一篇:dom 解析xml文件