一、JAXP DOM解析 javax.xml.parsers
1、获得document对象
//获得实例工厂 *javax.xml.parsers.DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//获得解析 *javax.xml.parsers.DocumentBuilderFactory
DocumentBuilder builder = factory.newDocumentBuilder();
//获得document --解析xml文档 java.io.FileNotFoundException *org.w3c.dom.Document
Document document = builder.parse("books.xml"); //指java项目的根路径下的文件
Document document=builder.parse(new File("Webcontent/orderstotal.xml")) //将给定文件的内容解析为一个 XML 文档,并且返回一个新的 DOM Document 对象
2、获得需要的内容:获得所有的书籍
//获得所有的书籍元素
NodeList bookElements = document.getElementsByTagName("book");
//遍历书籍元素的集合得到单个book元素
for(int i=0;i<bookElements.getLength();i++){
Element bookElement=bookElements.item(i);
//获得书籍的id属性的值
String id=bookElement.getAttribute("id");
//获得price子节点
//在已知只有一个price节点时可以这么获取
Node price=bookElement.getElementsByTagName("price").item(0);
//获得price节点的值
//1、getTextContent此属性返回此节点及其后代的文本内容* 例如:<book><title>Java</title><price>2</price></book> --> 返回字符串"java 2"
//2、getNodeValue 此节点的值
String priceText=price.getTextContent();
String priceText=price.getFirstChild().getNodeValue();
//获得相关书籍集合
NodeList relationbooks=bookElement.getElementsByTagName("relationbook");
}
3、遍历
* 获得长度
bookElements.getLength()
* 获得指索引的节点
bookElements.item(i);
* 通过元素获得,当前元素指定的属性
Element.getAttribute("id");
* 获得当前节点的名称
Node.getNodeName();
二、保存
//获得持久化对象实例工厂
TransformerFactory factory = TransformerFactory.newInstance();
//获得持久化对象
Transformer transformer = factory.newTransformer();
//将内存数据,保存到硬盘
//源:document 将document封装到Source
Source xmlSource = new DOMSource(document);
****1、保存为文件StreamResult(File f) -----》从 File 构造 StreamResult。
//结果:books.jasp.xml 将“文件路径”封装到Result
Result outputTarget = new StreamResult("books.jasp.xml");
*****2、StreamResult(Writer writer)-----》 从字符流构造 StreamResult
//结果返回一个字符流
StringWriter stringWriter = new StringWriter();
Result outputTarget= new StreamResult(stringWriter);
transformer.transform(xmlSource, outputTarget);
三、创建一个新的DOM
//获得实例工厂 *javax.xml.parsers.DocumentBuilderFactory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
//获得解析 *javax.xml.parsers.DocumentBuilderFactory
DocumentBuilder builder = factory.newDocumentBuilder();
// 获取 DOM Document 对象的一个新实例来生成一个 DOM 树
Document newDom=builder.newDocument()
//创建元素
Element newRoot=newDom.creatElement("books");
//将newRoot设置为根元素
newDom.appendChild(newRoot);
//创建book元素
Element newBook=newDom.creatElement("book");
//为book元素设置属性
newBook.setAttribute("id","1");
//为元素添加文本
1、newBook.setTextContent("java");
2、newBook.appendChild(newdoc.createTextNode("java"));
四、删除、修改、增加
/*
* 删除
*/
public static void delete(Document document){
/*操作:删除
* ---><book id="003">的id属性删除
*/
//获得booklist
NodeList booklist=document.getElementsByTagName("book");
//遍历booklist
for(int i=0;i<booklist.getLength();i++){
Element book=(Element) booklist.item(i);
String id=book.getAttribute("id");
if("003".equals(id)){
//删除属性节点
book.removeAttribute("id");
book.removeAttributeNode(book.getAttributeNode("id"));
//删除节点
// Element parent=(Element)book.getParentNode();
// parent.removeChild(book);
}
}
}
/*
* 增加
*/
public static void create(Document document){
/*操作:增加
* ---><book id="003">
<title>java</title>
<price>66</price>
</book>
*/
//获得根节点
Element root=document.getDocumentElement();
//创建book节点
Element book=document.createElement("book");
//设置id属性
book.setAttribute("id", "003");
//创建title节点
Element title=document.createElement("title");
//设置title的内容
title.setTextContent("eclipse");
//增加title子节点
book.appendChild(title);
//创建price节点
Element price = document.createElement("price");
// 设置price的内容
price.setTextContent("66");
// 增加price子节点
book.appendChild(price);
//为根节点增加book子节点
System.out.println(price);
root.appendChild(book);
}
/*
* 修改
*/
public static void update(Document document){
/*操作:修改
* --->将<book id="001">
<title>thinking in java</title>
<price>98</price>
</book>
修改为<title>java 编程思想</title>
*/
//1、获得book子节点集合
NodeList booklist=document.getElementsByTagName("book");
//遍历booklist
for(int i=0;i<booklist.getLength();i++){
Element book=(Element)booklist.item(i);
//id="001"的book
System.out.println(book.getAttribute("id"));
if("001".equals(book.getAttribute("id"))){
NodeList titlelist=book.getElementsByTagName("title");
Element title=(Element)titlelist.item(0);
System.out.println(title.getTextContent());
title.setTextContent("java 编程思想");
}}
}