JAVA DOM生成和解析XML实例
来源:互联网 发布:淘宝代运营哪家好 编辑:程序博客网 时间:2024/05/22 21:03
XML现在已经成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。java操作XML时候有4中经典方法,本文将介绍DOM操作XML。并给出一个用DOM生成和解析XML的实例。
初始步骤如下:
1.创建解析工厂:
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
2.指定DocumentBuilder
3.从文件构造一个Document,因为XML文件中已经指定了编码,所以这里不必了
Document xmlDoc = db.parse(new File("book.xml"));
上面三步可以得到映射了指定的XML文件的Document,之后,通过这个Document可以来操作XML。
得到Document的根
Element root = xmlDoc.getDocumentElement();
得到根后通过getTagName可以得到根节点名及其他一系列操作。
一.解析
获得XML某个元素的值:
NodeList list
//NodeList对象存储的是指定元素的值的列表,
//我们可以通过遍历来得到指定元素的各个值:
for(int i=0;i
Element element = (Element)list.item(i);
String id = element.getAttribute("id");
//
//得到标签title的列表
NodeList titleList = element.getElementsByTagName_r("title");
//得到"title"的第1组标签,事实上也只有一组标签
Element titleElement = (Element)titleList.item(0);
//获得title元素的第一个值
String title = titleElement.getFirstChild().getNodeValue();
}
二.修改
Element theBook=null, theElem=null;
//
theElem.setTextContent("新书");
//
三.输出
通过DOMSource和StreamResult完成
//首先创建转化工厂
TransformerFactory transFactory=TransformerFactory.newInstance();
//创建Transformer,它能够将源树转换为结果树
Transformer transformer = transFactory.newTransformer();
//接下来设置输出属性
transformer.setOutputProperty("indent", "yes");
DOMSource source =new DOMSource();
source.setNode(xmlDoc);
StreamResult result = new StreamResult();
接下来有三种输出用途:
//1.将XML字符串输出到String字符串中
ByteArrayOutputStream baos = new ByteArrayOutputStream();
result.setOutputStream(baos);
在执行完transformer.transform(source, result)后,
加入String s = baos.toString();
//2.直接输出到控制台上
result.setOutputStream(System.out);
//3.保存到指定的文件里面
result.setOutputStream(new FileOutputStream("book.xml"));
//开始执行将XML Source
转换为 Result
transformer.transform(source, result);
四、实例
import java.awt.List;import java.io.*;import java.util.*;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerException;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.NodeList;import org.w3c.dom.Node; //将XML中的节点以对象的方式进行封装class XMLObject{private String name,grade,age;public XMLObject(String name,String grade,String age) {this.name=name;this.grade=grade;this.age=age;}//返回一个XML的节点类Element public Element getXMLObject(Document doc) throws ParserConfigurationException{ //通过Document类的createElement创建一个节点Element Name = doc.createElement("name");Element Grade= doc.createElement("grade");Element Age =doc.createElement("age");Element Student=doc.createElement("student");//Element类的setTextContent(String textContent)方法设置节点值Name.setTextContent(name);Grade.setTextContent(grade);Age.setTextContent(age);Student.appendChild(Name);Student.appendChild(Grade);Student.appendChild(Age);return Student;}}public class XML{ public static void createXML(String XMLname)throws ParserConfigurationException, TransformerException, IOException{ //创建一个Document类 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.newDocument(); //创建一个根节点,并且将根节点添加到Document对象中去 Element root=doc.createElement("students"); doc.appendChild(root); //使用ArryayList,便于添加自己所创建的对象 ArrayList<XMLObject> stu=new ArrayList<XMLObject>(); stu.add(new XMLObject("Jhon","B","12")); stu.add(new XMLObject("Mary","A","11")); stu.add(new XMLObject("Simon","A","18")); //将ArrayList里面的对象全部添加到根节点中去 for(XMLObject t:stu){ root.appendChild(t.getXMLObject(doc)); } //开始把Document映射到文件 TransformerFactory transFactory = TransformerFactory.newInstance(); Transformer transFormer = transFactory.newTransformer(); //设置输出结果并且生成XML文件 DOMSource domSource = new DOMSource(doc); File file = new File(XMLname); if (!file.exists()) file.createNewFile(); //设置输入源并且输出XML文件 FileOutputStream out = new FileOutputStream(file); StreamResult xmlResult = new StreamResult(out);//设置输入源 transFormer.transform(domSource, xmlResult);//输出xml文件 System.out.println(file.getAbsolutePath());//测试文件输出的路径 }public static void parseXML(String fileName) { try { DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); File file = new File(fileName); if (file.exists()) { Document doc = db.parse(file); Element docEle = doc.getDocumentElement(); // Print root element of the document System.out.println("Root element of the document: " + docEle.getNodeName()); NodeList studentList = docEle.getElementsByTagName("student"); // Print total student elements in document System.out.println("Total students: " + studentList.getLength()); if (studentList != null && studentList.getLength() > 0) { for (int i = 0; i < studentList.getLength(); i++) { Node node = studentList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { System.out.println("====================="); Element e = (Element) node; NodeList nodeList = e.getElementsByTagName("name"); System.out.println("Name: " + nodeList.item(0).getChildNodes().item(0) .getNodeValue()); nodeList = e.getElementsByTagName("grade"); System.out.println("Grade: " + nodeList.item(0).getChildNodes().item(0) .getNodeValue()); nodeList = e.getElementsByTagName("age"); System.out.println("Age: " + nodeList.item(0).getChildNodes().item(0) .getNodeValue()); } } } else { System.exit(1); } } } catch (Exception e) { System.out.println(e); } } //测试public static void main(String []args) throws ParserConfigurationException, TransformerException, IOException{XML.createXML("D:\\java\\zhengZe\\Student.xml");XML.parseXML("D:\\java\\zhengZe\\Student.xml");}}
这样就可以在相应的路径下面创建和解析XML文档了,这段代码将要插入的XML节点以对象封装,插入其他节点时候,只需对XMLObject修改即可。
可以看到,生成的XML文件如下:
- JAVA DOM生成和解析XML实例
- JAVA 生成解析XML-DOM
- DOM生成和解析xml
- DOM解析XML和生成
- Dom生成Xml和解析Xml
- Java---DOM解析XML文档详解实例
- java解析与生成xml(一): Dom
- .DOM生成和解析XML文档
- DOM生成和解析XML文档
- DOM生成和解析XML文档
- Dom解析和生成XML文档
- Dom解析和生成XML文档
- Dom解析和生成XML文档
- XML文件的解析和生成(DOM)
- DOM生成和XML文档解析
- Dom解析和生成XML文档
- dom解析和生成XML文件
- DOM解析Xml实例
- JS----元素,事件,方法小集
- linux/windows下利用JDK自带的工具获取thread dump文件和heap dump文件
- 070002 《设计心理学》读后感
- 64位win7下powerdesigner15连接postgresql9.2问题解决
- 字符串匹配之---BF算法(暴力破解法)
- JAVA DOM生成和解析XML实例
- python 学习日记(一)
- Linux磁盘设备名变了
- javascript DOM编程艺术学习笔记(5)通过DOM来设置样式案例
- vs2010+matlab R2013a+win7 32bit 混合编程
- java 多线程之join
- 程序员必读经典书籍
- 1011. A+B和C (15)
- 【Boost】boost::noncopyable介绍