xml-03-Java操作XML
来源:互联网 发布:威少刷数据视频 编辑:程序博客网 时间:2024/05/17 01:40
一、递归遍历整个文档
1.创建Document对象
1.创建Document对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();// 创建文档构建器工厂
DocumentBuilder builder = factory.newDocumentBuilder(); // 通过工厂来获得文档构建器
Document doc = builder.parse(new File("example.xml")); //读取xml文件生成一个document对象
2.递归打印节点名称
public static void printNodeName(Node node,String line){
if(node instanceof Element){
System.out.println(line + node.getNodeName());
}
if(node.hasChildNodes()){
NodeList nl = node.getChildNodes();
for(int i =0;i<nl.getLength();i++){
printNodeName(nl.item(i),line+"\t");
}
}
}
3.完整事例
package xml;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ReadXml {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(ReadXml.class.getClassLoader().getResourceAsStream("config.xml"));
Node nodeList = document.getFirstChild();
printNodeName(nodeList,"");
}
public static void printNodeName(Node node,String line){
if(node instanceof Element){
System.out.println(line + node.getNodeName());
}
if(node.hasChildNodes()){
NodeList nl = node.getChildNodes();
for(int i =0;i<nl.getLength();i++){
printNodeName(nl.item(i),line+"\t");
}
}
}
}
二、写Document到文档
三、读写Document
2.对读取的Document对象进行修改
四、抽取公共方法
我们发现,每个读方法中都要进行读取文件解析为dom对象,每个写方法都要把node对象写入到一个文件中进行持久化,既然是常用的方法,那么我们就要对其进行抽取。代码如下:
这样,我们使用java对xml的操作就完成了。
二、写Document到文档
1.创建Document对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument(); // 创建一个新的对象
2.创建Dom节点
Element rootEle = doc.createElement("books"); // 创建一个节点
doc.appendChild(rootEle); // 挂到document上,也就是根节点
Element e = doc.createElement("book"); // 再创建一个节点
e.setAttribute("name", "疯狂java讲义"); // 给节点设置属性
rootEle.appendChild(e); // 把节点添加到创建的节点下
3.把Document写入到文件中
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
DOMSource ds = new DOMSource(doc); // 要写出的资源
PrintWriter pw = new PrintWriter(new File("c.xml")); // 写出的目的地
StreamResult sr = new StreamResult(pw); // 使用result包裹流
ts.transform(ds, sr);
4.例子(Example)
package xml;
import java.io.File;
import java.io.PrintWriter;
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;
public class Writer {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.newDocument(); // 创建一个新的对象
//parse(Writer.class.getClassLoader().getResourceAsStream("config.xml"));
Element rootEle = doc.createElement("books");
doc.appendChild(rootEle);
Element e = doc.createElement("book");
e.setAttribute("name", "疯狂java讲义");
rootEle.appendChild(e);
TransformerFactory tf = TransformerFactory.newInstance();
Transformer ts = tf.newTransformer();
DOMSource ds = new DOMSource(doc); // 要写出的资源
PrintWriter pw = new PrintWriter(new File("c.xml")); // 写出的目的地
StreamResult sr = new StreamResult(pw); // 使用result包裹流
ts.transform(ds, sr);
}
}
三、读写Document
1.创建Document对象
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(
ReadXml.class.getClassLoader().getResourceAsStream("config.xml")); // 加载classpath下的xml文件生成dom树
2.对读取的Document对象进行修改
Element e = doc.getDocumentElement(); // 获得根节点
Element book = doc.createElement("book"); // 创建一个新节点
book.setAttribute("name", "疯狂HTML讲义"); // 给新的节点设置属性
e.appendChild(book); // 把新创建的节点添加到根节点下
System.out.println(e.getNodeName()); // 打印根节点的名字
3.将修改后的Document对象写入到文件
TransformerFactory tf = TransformerFactory.newInstance();
Transformer t = tf.newTransformer();
DOMSource xmlSource = new DOMSource(doc);
StreamResult sr = new StreamResult(new PrintWriter("d.xml"));
t.transform(xmlSource, sr);
4.完整事例
package xml;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
public class ReadXml {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(ReadXml.class.getClassLoader().getResourceAsStream("config.xml"));
Node nodeList = document.getFirstChild();
printNodeName(nodeList,"");
}
public static void printNodeName(Node node,String line){
if(node instanceof Element){
System.out.println(line + node.getNodeName());
}
if(node.hasChildNodes()){
NodeList nl = node.getChildNodes();
for(int i =0;i<nl.getLength();i++){
printNodeName(nl.item(i),line+"\t");
}
}
}
}
四、抽取公共方法
我们发现,每个读方法中都要进行读取文件解析为dom对象,每个写方法都要把node对象写入到一个文件中进行持久化,既然是常用的方法,那么我们就要对其进行抽取。代码如下:
package cn.anbow.utils;import java.io.File;import java.io.PrintWriter;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.Node;public class DomUtils {/** * 读取xml文件转成dom对象 * @param fileName * @return */public static Document readXml(String fileName){try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc= builder.parse(new File(fileName));return doc;} catch (Exception e) {e.printStackTrace();throw new RuntimeException(e);}}/** * 把dom对象写入到文件中 * @param node * @param filePath */public static void writeXml(Node node,String filePath){TransformerFactory factory = TransformerFactory.newInstance();Transformer tf;try {tf = factory.newTransformer();DOMSource ds = new DOMSource(node);StreamResult sr = new StreamResult(new PrintWriter(filePath));tf.transform(ds, sr);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
这样,我们使用java对xml的操作就完成了。
0 0
- xml-03-Java操作XML
- java中操作XML
- JAVA操作XML大全
- java 操作XML
- java操作xml小结
- java+dom4j操作XML
- Java操作XML
- java操作xml文件
- JAVA 操作xml
- Java操作XML对象
- 使用Java操作XML
- Java操作XML
- Java操作XML范例
- java 操作XML
- java操作xml
- java xpah 操作xml
- Java XML操作总结
- java操作XML
- 学习《Python基础教程(第二版)》笔记6---条件循环语句
- [JLOI2014]松鼠的新家
- 关于SpringMVC Json使用
- 磁盘
- Map 循环
- xml-03-Java操作XML
- MyBatis数据持久化 SQL复用(可重用的 SQL 代码段)
- 重建二叉树
- Java(线程的创建)
- test0
- POJ1661-Help Jimmy
- 操作系统
- 安装eclipse过程
- 二叉树经典面试题汇总