欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jdom解析xml文件

程序员文章站 2022-05-28 08:05:08
...

<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person perid="1001">
<name>jim</name>
<age>89</age>
<address>安徽淮北</address>
<sex>男</sex>
</person>

<person perid="1002">
<name>tom</name>
<age>56</age>
<address>北京海淀</address>
<sex>女</sex>
</person>
</persons>



[size=medium]
package jdomXml;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
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.XMLOutputter;

/**
* jdom解析xml文件
*
* @author ly *
*/
public class JDomXML {

public JDomXML() {
}

/**
* 解析xml文件
*
* @param xmlFile
*/
@SuppressWarnings("rawtypes")
public void parseXml(File xmlFile) {
SAXBuilder sax = new SAXBuilder(false);// 这表示使用的是默认的解析器.SAXBuilder是一个JDOM解析器
// 能将路径中的XML文件解析为Document对象.
// 在内存中建立一个sax文档模型,创建解析对象
try {
Document xmlDom = sax.build(xmlFile);// 解析对象调用build方法建立文档对象 ,创建文档
// 获得文件的根元素
Element root = xmlDom.getRootElement();
System.out.println("根元素是:" + root.getName());

// 获得根元素的子节点
List childList = root.getChildren();
for (Iterator iter = childList.iterator(); iter.hasNext();) {
Element person = (Element) iter.next();
String perid = person.getAttributeValue("perid");
// 取得元素的子元素(为最低层元素)的值:
String name = person.getChildTextTrim("name");
System.out.println("孩子结点是:" + person.getName());
System.out.println("perid:" + perid);
System.out.println("name:" + name);
// 注意的是,必须确定book元素的名为“name”的子元素只有一个。
person.getChild("name").setText("alterrjzjh");// 这只是对Document的修改,并没有在实际的XML文档中进行修改
}
XMLOutputter outputter = new XMLOutputter();
outputter.output(xmlDom, new FileOutputStream(xmlFile));
// 保存Document的修改到XML文件中:我们先要有一个
// XMLOutputter类,再把已经修改了的Document保存进XML文档中

// 获得第一个孩子结点
Element firstChild = (Element) childList.get(0);
// 获得孩子结点的属性
List attrList = firstChild.getAttributes();
Iterator attrIt = attrList.iterator();
while (attrIt.hasNext()) {
Attribute attr = (Attribute) attrIt.next();
System.out.println("第一个元素的属性是:" + attr.getName());
// 获得属性的值
System.out.println("属性的值是:" + attr.getValue());
// 获得属性的类型
System.out.println("属性的类型是:" + attr.getAttributeType());
}

List sonList = firstChild.getChildren();
Iterator sonIt = sonList.iterator();
while (sonIt.hasNext()) {
Element temp = (Element) sonIt.next();
System.out.println("属性" + temp.getName() + "的值是:"
+ temp.getValue());
}

} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
JDomXML test = new JDomXML();
test.parseXml(new File("persons.xml"));
}
}
[/size]