XML解析的四种方式
package leif;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
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;
public class Test {
public static void main(String[] args){
try {
// 1、创建DocumentBuilder解析器
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
// 2、创建DOM对象
Document document = documentBuilder.newDocument();
document.setXmlStandalone(true);// 不显示standalone="no"
// 3、创建元素节点
Element bookStore = document.createElement("bookStore");
Element book = document.createElement("book");
Element name = document.createElement("name");
// 4、创建属性节点
book.setAttribute("id", "1");
// 5、创建文本节点
name.setTextContent("Java从入门到放弃");
// 6、添加节点关系
book.appendChild(name);
bookStore.appendChild(book);
document.appendChild(bookStore);
// 7、创建Transformer转换器
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
// 8、设置转换格式
transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 换行
// 9、创建XML文件并写入内容
transformer.transform(new DOMSource(document), new StreamResult(new File("C:\\Users\\Administrator\\Desktop\\bookStore.xml")));
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (TransformerException e) {
e.printStackTrace();
}
}
}
生成book3.xml如下:
package com.zjc;
import org.xml.sax.helpers.AttributesImpl;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.sax.SAXTransformerFactory;
import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.io.FileOutputStream;
public class TestXml4 {
public static void main(String[] args) throws Exception {
//1.创建TransformerHandler处理器
SAXTransformerFactory saxTransformerFactory= (SAXTransformerFactory) SAXTransformerFactory.newInstance();
TransformerHandler transformerHandler=saxTransformerFactory.newTransformerHandler();
//2.创建Transformer转换器并设置转换格式
Transformer transformer=transformerHandler.getTransformer();
transformer.setOutputProperty(OutputKeys.ENCODING,"UTF-8");//编码
transformer.setOutputProperty(OutputKeys.INDENT,"yes");//换行
//3.创建Result对象并连接XML文件
Result result=new StreamResult(new FileOutputStream(new File("src/book4.xml")));
//4.关联Result到TransformerHandler处理器
transformerHandler.setResult(result);
// 5、打开DOM对象
transformerHandler.startDocument();
// 6、创建属性列表
AttributesImpl attributes=new AttributesImpl();
// 7、创建元素节点和属性节点
attributes.clear();
transformerHandler.startElement(null,null,"bookStore",attributes);
// 8、添加子节点和子节点的属性节点
attributes.clear();
attributes.addAttribute(null,null,"id",null,"1");
transformerHandler.startElement(null,null,"book",attributes);
attributes.clear();
transformerHandler.startElement(null,null,"name",attributes);
transformerHandler.characters("Java从入门到放弃".toCharArray(),0,"Java从入门到放弃".length());
// 9、依次关闭节点
transformerHandler.endElement(null,null,"name");
transformerHandler.endElement(null,null,"book");
transformerHandler.endElement(null,null,"bookstore");
// 10、关闭DOM对象
transformerHandler.endDocument();
}
}
需导入jdom的jar包
package com.zjc;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
import javax.xml.transform.ErrorListener;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
public class TestXml5 {
public static void main(String[] args) {
//1.创建根节点
Element root=new Element("bookstore");
//2.创建DOM对象
Document document=new Document(root);
//3.创建子节点
Element book=new Element("book");
Element name=new Element("name");
//4.创建属性节点
book.setAttribute("id","1");
//5.创建文本节点
name.setText("Java从入门到精通");
//6.添加节点到父节点
book.setContent(name);
root.setContent(book);
//7.设置转换格式
Format format=Format.getCompactFormat();
format.setIndent(" ");//换行和缩进
format.setEncoding("UTF-8");//编码
//8.创建XMLOutputter转换器
XMLOutputter xmlOutputter=new XMLOutputter(format);
//9.转换成XML文件
try {
xmlOutputter.output(document,new FileOutputStream(new File("src/book5.xml")));
} catch (IOException e) {
e.printStackTrace();
}
}
}
须导入dom4j的jar包
package com.zjc;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import javax.sql.rowset.spi.XmlWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
public class TestXml2 {
public static void main(String[] args) throws Exception {
//通过DocumentHelper生成一个Document对象
Document doc=DocumentHelper.createDocument();
//添加并得到根元素
Element root = doc.addElement("books");
//为根元素得到子元素
Element book = root.addElement("book");
//为book元素添加属性
book.addAttribute("id","1");
//为book元素添加子元素
Element name = book.addElement("name");
Element author = book.addElement("author");
Element price = book.addElement("price");
//为子元素添加文本
name.addText("JAVA高级编程");
author.addText("张三");
price.addText("99.9");
//Writer writer=new FileWriter(new File("src/book2.xml"));
//doc.write(writer);
//writer.close();
//格式良好的输出xml文件
OutputFormat prettyPrint = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/book2.xml")),prettyPrint);
writer.write(doc);
//关闭资源
writer.close();
}
}
一般采用dom4j的方式比较多
解析XML文件
也需要导入dom4的jar包
package com.zjc;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.File;
import java.util.Iterator;
public class TestXml {
public static void main(String[] args) throws Exception {
//1.创建SAXReader对象,用于读取XMl文件
SAXReader reader=new SAXReader();
//2.读取xml文件,得到Document对象
Document document=reader.read(new File("src/scores.xml"));
//3.获取根元素
Element rootElement = document.getRootElement();
//4.获取根元素下的所有子元素
Iterator<Element> iterator = rootElement.elementIterator();
while (iterator.hasNext()){
//取出元素
Element e=iterator.next();
System.out.println(e.getName());
}
}
}