您的位置:首页 > 编程语言 > Java开发

Java解析XML文件的两种方式详解

2015-06-08 16:36 435 查看
Java解析XML文件:
常规的两种方式:dom4j方式+jdom方式
1.要解析的xml文件

<?xml version="1.0" encoding="utf-8"?>
<books>
<book name="ThinkInJava">
<language>english</language>
<price>60.0</price>
</book>
<book name="Java编程思想">
<language>chinese</language>
<price>75.0</price>
</book>
</books>

 
2.dom4j方式:需要用dom4j.jar包

public class Dom4jXML {

public Dom4jXML() {
}

public void praseXML(String filePath) {
SAXReader reader = new SAXReader();// 创建一个能读取xml文档的reader
Document document;// 构建一个文档对象,用来将xml转换成Document对象
try {
document = reader.read(new FileInputStream(new File(filePath)));// 从给定的文件中读取xml并且构建成Document
Element rootElement = document.getRootElement();// 获得文档对象的根节点
List<Element> listElement = rootElement.elements();// 获得根节点下面所有的子节点
for (Element e : listElement) {// 遍历所有的子节点
Element element = e;// 当前节点,也就是Book节点
Attribute nameAttribute = element.attribute("name");// 得到当前节点的属性对象
String nameString = nameAttribute.getValue();// 获得属性对象的值
System.out.println(element.getName() + ":" + nameString);// 将节点信息输出

Element languageElement = element.element("language");// 获得当前节点的language子节点
System.out.println(languageElement.getName() + ":" + languageElement.getTextTrim());// 将language节点信息输出

Element priceElement = element.element("price");
System.out.println(priceElement.getName() + ":" + priceElement.getText());

// 判断有没有出版年份节点,要是有就打印出来,要是没有就创建并且添加到Document对象中(添加节点)
Element yearElement = element.element("year");
if (yearElement == null) {
yearElement = element.addElement("year");
yearElement.setText("2014year");
} else {
System.out.println(yearElement.getName() + ":" + yearElement.getTextTrim());
}

// 通货膨胀,导致中国物价上涨,凡是汉语书籍涨价10.00元(修改节点)
if (languageElement.getTextTrim().equals("chinese")) {
String priceStr = priceElement.getTextTrim();
double priceNum = Double.parseDouble(priceStr);
priceNum += 10.00;
priceElement.setText(priceNum + "");
}

}
// 将修改以后的Document对象保存成xml到原来的地方
XMLWriter write = new XMLWriter(new FileWriter(filePath));
write.write(document);
write.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
}

public static void main(String[] args) {
new Dom4jXML().praseXML("你自己的xml路径");
}
}

 
3.jdom方式:需要用到jdom.jar包

public class JdomXML {
public JdomXML() {
}

public void parseXML(String filePath) {
SAXBuilder builder = new SAXBuilder(false);// 用来读取xml文件
Document document;// 构建一个文档对象,用来将xml转换成Document对象
try {
document = builder.build(new FileInputStream(new File(filePath)));// 从给定的文件中读取xml并且构建成Document
Element elementRoot = document.getRootElement();// 获得文档对象的根节点
List<Element> elementList = elementRoot.getChildren("book");// 获得根节点下面所有的Book节点
for (Element e : elementList) {// 遍历Book节点
Element element = e;// 当前的Book节点
String name = element.getAttributeValue("name");// 获得Book节点的name属性

Element languageElement = element.getChild("language");// 获得Book节点下的language子节点
String language = languageElement.getValue();// 获得language节点的值

Element priceElement = element.getChild("price");
String price = priceElement.getValue();

// 打印输出子节点相关信息
System.out.println(element.getName() + ":" + name);
System.out.println(languageElement.getName() + ":" + language);
System.out.println(priceElement.getName() + ":" + price);

// 判断有没有出版年份节点,要是有就打印出来,要是没有就创建并且添加到Document对象中(添加节点)
Element yearElement = element.getChild("year");
if (yearElement == null) {
yearElement = new Element("year");
yearElement.setText("2014year");
element.addContent(yearElement);
} else {
System.out.println(yearElement.getName() + ":" + yearElement.getValue());
}

// 判断是不是外文书籍,要是外文书籍,就降价1.50元(修改节点)
if (language.equals("english")) {
double priceNum = Double.parseDouble(price);
priceNum -= 1.50;
priceElement.setText(priceNum + "");
}
}
// 将修改以后的Document对象保存成xml到原来的地方
XMLOutputter outputter = new XMLOutputter();
outputter.output(document, new FileOutputStream(new File(filePath)));
} catch (JDOMException | IOException e) {
e.printStackTrace();
}

}

public static void main(String[] args) {
new JdomXML().parseXML("你自己的xml路径");
}
}

 
说明:两种方式都是可以的,原理基本相同。语法略有不同,但是还是都很好理解。
可以使用这种方法完成一个自己的Spring的IOC的功能玩玩。

dom4j.jar (497 KB)

下载次数: 19

jdom.jar (149.2 KB)

下载次数: 18
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: