XML文件
<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book id="1">
<name>冰与火之歌</name>
<author>乔治马丁</author>
<year>2016</year>
<price>78</price>
</book>
<book id="2">
<name>安徒生童话</name>
<year>2016</year>
<price>58</price>
<language>English</language>
</book>
</bookstore>
一:DOM新建及解析
public class DOMTest {
public static void main(String[] args) {
}
public DocumentBuilder getDocumentBuilder() {
//创建一个DocumentBuilderFactory对象
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//创建一个DocumentBuilder对象
DocumentBuilder db = null;
try {
db = dbf.newDocumentBuilder();
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return db;
}
//生成xml方法
public void createXML() {
DocumentBuilder db = getDocumentBuilder();
Document document = db.newDocument();
document.setXmlStandalone(true);
Element bookstore = document.createElement("bookstore");
//创建子节点book
Element book = document.createElement("book");
Element name = document.createElement("name");
book.setAttribute("id", "1");
name.setTextContent("小王子");
//将book节点加到bookstore根节点中
bookstore.appendChild(book);
book.appendChild(name);
//将bookstore节点(已经包含了book)添加到dom树中
document.appendChild(bookstore);
//创建TransformerFactory对象
TransformerFactory tff = TransformerFactory.newInstance();
try {
//创建Transformer对象
Transformer tf = tff.newTransformer();
tf.setOutputProperty(OutputKeys.INDENT, "yes");
tf.transform(new DOMSource(document), new StreamResult(new File("book1.xml")));
} catch (TransformerConfigurationException e) {
e.printStackTrace();
}catch (TransformerException e) {
e.printStackTrace();
}
}
//解析xml方法
public void xmlParser() {
try {
//通过DocumentBuilder对象的parser方法,解析books.xml文件到当前目录
Document document = getDocumentBuilder().parse("books.xml");
//获取所有book节点的集合
NodeList bookList = document.getElementsByTagName("book");
//通过nodeList的getLength方法获取bookList长度
System.out.println("一共有" + bookList.getLength() + "本书");
//遍历每一个book节点
for (int i=0;i<bookList.getLength();i++) {
//通过item方法获取一个book节点,nodeList索引值从0开始
System.out.println("----------------开始第"+(i+1)+"次遍历----------------");
Node book = bookList.item(i);
//获取book节点的所有属性集合
NamedNodeMap attrs = book.getAttributes();
System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性");
//遍历book属性
for(int j=0;j<attrs.getLength();j++) {
//通过item方法获取book节点的某一个属性
Node attr = attrs.item(j);
//获取属性名
System.out.print("属性:"+attr.getNodeName());
//获取属性值
System.out.println("--属性值:"+attr.getNodeValue());
}
//解析book节点的子节点
NodeList childNodes = book.getChildNodes();
//遍历每个节点,获取节点的节点名和节点值
System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点");
for (int k = 0; k < childNodes.getLength(); k++) {
//区分text类型的node和element类型的node
if (childNodes.item(k).getNodeType() == Node.ELEMENT_NODE ) {
System.out.print("第"+(k+1)+"子节点的名称:"+childNodes.item(k).getNodeName());
System.out.println("--第"+(k+1)+"子节点的值:"+childNodes.item(k).getFirstChild().getNodeValue());
}
}
System.out.println("----------------结束第"+(i+1)+"次遍历----------------");
}
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
二:SAX新建及解析
三:JDOM新建及解析
四:DOM4J新建及解析
public class DOM4JTest {
public static void main(String[] args) {
}
//创建xml文件
private void createXML() {
//1.创建document对象,代表整个xml对象
Document document = DocumentHelper.createDocument();
//2.创建根节点rss
Element rss = document.addElement("rss");
//3.像rss节点中添加version属性
rss.addAttribute("version", "2.0");
//4.生成子节点及节点内容
Element channel = rss.addElement("channel");
Element title= channel.addElement("title");
title.setText("《》<国内新闻");
//5.设置生成xml的格式
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
//6.生成xml文件
File file = new File("rssnews.xml");
XMLWriter writer;
try {
writer = new XMLWriter(new FileOutputStream(file),format);
//设置是否转义,默认值为true,代表转义
writer.setEscapeText(false);
writer.write(document);
writer.close();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//解析xml文件
private void parseXML(){
// 创建SAXReader的对象reader
SAXReader reader = new SAXReader();
try {
// 通过reader对象的read方法加载books.xml文件,获取document对象
Document document = reader.read(new File("src/res/books.xml"));
// 通过document对象获取根节点bookstore
Element bookstore = document.getRootElement();
// 通过element对象的elementIterator方法获取迭代器
Iterator it = bookstore.elementIterator();
// 遍历迭代器,获取根节点中的信息(书籍)
while (it.hasNext()) {
Book bookEntity = new Book();
System.out.println("----开始遍历----");
Element book = (Element) it.next();
// 获取book的属性名及属性值
List<Attribute> bookAttrs = book.attributes();
for (Attribute attr : bookAttrs) {
System.out.println("属性名:" + attr.getName() + "----属性值:" + attr.getValue());
if (attr.getName().equals("id")) {
bookEntity.setId(attr.getValue());
}
}
Iterator itt = book.elementIterator();
while (itt.hasNext()) {
Element bookchild = (Element) itt.next();
System.out.println("节点名:" + bookchild.getName() + "节点值:" + bookchild.getStringValue());
if (bookchild.getName().equals("price")) {
bookEntity.setPrice(bookchild.getStringValue());
}
}
System.out.println("----结束遍历----");
System.out.println("----bookEntity----" + bookEntity.getId());
System.out.println("----bookEntity----" + bookEntity.getPrice());
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
}
Book.entity
public class Book {
private String id;
private String name;
private String author;
private String year;
private String price;
private String language;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
public String getPrice() {
return price;
}
public void setPrice(String price) {
this.price = price;
}
public String getLanguage() {
return language;
}
public void setLanguage(String language) {
this.language = language;
}
}