利用JDOM解析xml步骤实例分析,如有不懂,请参照jdomAPI对照理解,下面是jdomAPI网上参考地址:
http://www.jdom.org/docs/apidocs/
import java.io.File;
import java.io.FileOutputStream;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.Format;
import org.jdom2.output.XMLOutputter;
public class Test5 {
/**
* jdk提供的sax和dom都有明显的缺点
* 第三方提供了对xml处理的jar包-jdom,dom4j...
*
* jdom:开源免费,综合了sax和dom的优点,以dom的方式解析数据,并消耗的内存不大。
* xml的操作
* 1)读取xml数据-到程序
* a)创建SAXBuilder解析器对象
* -》new SAXBuilder()
* b)通过解析器对象build进行解析xml-》得到document对象
* -》Document build(java.io.File file)
* c)通过document对象去xml中找对应需要的数据
* -》注意jdom没有使用jdk的dom的api
* (document和element。。都是自己定义的)
* 1)doc找根标记
* getRootElement()
* 2)ele找所有子标记
* getChildren()
* 3)ele找指定名字的子标记
* getChild(java.lang.String cname)
* 4)ele找指定属性名的值
* getAttributeValue(java.lang.String attname)
* 5)ele找文本内容
* getText()
*
* 2)把程序的数据-写到xml中
* a)把数据存储到document对象中
* b)把document对象数据写到xml中
* 例子:
* 2个用户
* 刘德华 18 布鲁明顿
* 蔡依林 20 春熙路
* --》xml存储的方式
* <users>
* <user name="刘德华" age="18">
* 布鲁明顿
* </user>
* <user name="蔡依林" age="20">
* 春熙路
* </user>
* </users>
*
* a)把数据存储到document对象中
* 1)创建document对象
* 2)创建users的element对象
* 3)把users设置为document的根标签
* 4)创建两个user标签设置属性和文本内容
* 5)把user加入到users标签里
*
* b)把document对象数据写到xml中
*
* 1)创建xml输出器xmlOutputer对象
* --》new XMLOutputter()
* 2)利用输出器的输出功能
* --》 output
*
*
* 3)更新xml的数据
* a)读取xml的数据到document对象
* b)修改document对象的数据
* c)把document对象数据输出的xml
*
*/
public static void main(String[] args)throws Exception {
createXml();
parserXml();
}
private static void createXml() throws Exception{
// a)把数据存储到document对象中
// 1)创建document对象
Document doc=new Document();
// 2)创建users的element对象
Element users=new Element("users");
// 3)把users设置为document的根标签
doc.setRootElement(users);
// 4)创建两个user标签设置属性和文本内容
Element user1=new Element("user");
user1.setAttribute("name", "刘德华");
user1.setAttribute("age", "18");
user1.setText("布鲁明顿");
Element user2=new Element("user");
user2.setAttribute("name", "蔡依林");
user2.setAttribute("age", "20");
user2.setText("春熙路");
// 5)把user加入到users标签里
users.addContent(user1);
users.addContent(user2);
// b)把document对象数据写到xml中
//xml漂亮的格式化对象
Format format=Format.getPrettyFormat();
// 1)创建xml输出器xmlOutputer对象
XMLOutputter out= new XMLOutputter(format);
// 2)利用输出器的输出功能
out.output(doc, new FileOutputStream("src/xml/test5.xml"));
System.out.println("输出xml完成");
}
private static void parserXml() throws Exception{
// a)创建SAXBuilder解析器对象
SAXBuilder sb=new SAXBuilder();
// b)通过解析器对象build进行解析xml-》得到document对象
Document t3doc= sb.build(new File("src/xml/test3.xml"));
//c)通过docment取出根标记(users)Elment对象
Element users= t3doc.getRootElement();
/**
* 通过users取出xml中
* 年龄>24的所有名字和地址数据打印到控制台
*/
//通过跟标记users找到所有子标记user
List<Element> listUser= users.getChildren();
System.out.println("子节点数量:"+listUser.size());
//遍历 listUser所有的user找到年龄>24
for (Element user : listUser) {
//找到年龄
int age= user.getAttribute("age").getIntValue();
//年龄>24才取数据
if(age>24){
String name=user.getAttributeValue("name");
String addr=user.getTextTrim();
System.out.println("名字:"+name+" 地址:"+addr);
}
}
}
}