目前,比较流行的解析XML的技术有,JDOM、DOM4J、XQUERY等。本篇文档,主要是使用JDOM来实现对XML文档的解析。
首先,要进行JDOM解析,必须先在项目中导入相关的jar包:
1、导入jar包
2、创建XML文件
3、对xml文件进行解析和更新
贴出代码为:
package com.jjyy.jdom.parse;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
import org.junit.Before;
import org.junit.Test;
/**
* Jdom解析xml
*
* @author JiangYu
*
*/
public class JDomParseDemo {
private String name;
@Before
public void getLocation() {
name = System.getProperty("user.dir") + "\\src\\computer.xml";
}
@Test
public void testCreate() {
createXML(name);
}
@Test
public void testParserAndUpdate() {
parserAndUpdate(name);
}
/**
* 创建xml文件
*/
public static void createXML(String name) {
try {
// 创建节点
Element rootElement = new Element("computer");
Element priceElement = new Element("price");
priceElement.setText("5000");
// 设置属性
priceElement.setAttribute("way", "$");
Element hardwareEle = new Element("hardware");
Element screenElem = new Element("screen");
screenElem.setText("samsung");
hardwareEle.addContent(screenElem);
// 为父节点添加子元素
rootElement.addContent(priceElement);
rootElement.addContent(hardwareEle);
// 根据节点创建Document
Document document = new Document(rootElement);
// 将文档写出到硬盘
// 创建输出格式 pretty适合阅读 compact适合传输
Format format = Format.getPrettyFormat();
format.setEncoding("utf-8");
// 创建输出对象
// 创建输出对象
XMLOutputter xmlOutputter = new XMLOutputter(format);
// 写出
xmlOutputter.output(document, new FileOutputStream(name));
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 解析并修改文档
*
* @param name
* @throws JDOMException
* @throws IOException
*/
public static void parserAndUpdate(String name) {
try {
// 创建JDOm的解析器
SAXBuilder saxBuilder = new SAXBuilder();
// 创建文档对象模型
InputStream is = new FileInputStream(name);
Document document = saxBuilder.build(is);
// 获取根节点
Element rootElement = document.getRootElement();
// 获取指定的子节点
Element priceElement = rootElement.getChild("price");
// 获取节点的文本内容
System.out.println(priceElement.getText());
System.out.println(priceElement.getAttributeValue("way"));
// 获取screen
Element screenEle = rootElement.getChild("hardware").getChild("screen");
System.out.println(screenEle.getText());
// 不常用
List<Element> list = rootElement.getChildren();
System.out.println(list.size());
rootElement.getContent();// 不需要去看 了解下就型了
/** ************修改获取到的节点的信息*******都是在内存中修改的********* */
// 修改属性信息
priceElement.setAttribute("way", "RMB");
// 新增一个属性
Attribute abcdAttr = new Attribute("real", "yes");
priceElement.setAttribute(abcdAttr);
// 添加一个节点
Element softwareElement = new Element("software");
softwareElement.setText("softWare");
rootElement.addContent(softwareElement);
// 添加文本节点(当本节点已经存在别的节点,如果在使用setText会将以前的覆盖掉)
// rootElement.addContent("你是一个坏人");
/** ******************将内存中的信息写会硬盘********************** */
// 创建输出的格式 pretty适合阅读 compact适合传输
Format format = Format.getPrettyFormat();
format.setEncoding("utf-8");
// 创建输出对象
XMLOutputter xmlOutputter = new XMLOutputter(format);
// 写出
xmlOutputter.output(document, new FileOutputStream(name));
} catch (Exception e) {
e.printStackTrace();
}
}
}