永发信息网

dom4j解析xml

答案:2  悬赏:10  手机版
解决时间 2021-11-19 01:32
dom4j解析xml
最佳答案
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XmlTest2 {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
reader.setEncoding("UTF-8");
Document doc = null;
try {
File file = new File("test2.xml");
doc = reader.read(file);
printNode(doc.selectNodes("DSExport/Job"));
}
catch (DocumentException e) {
e.printStackTrace();
}
}
public static void printNode(List nodeList) {
for (Node jobNode : nodeList) {
printProperty(jobNode.selectNodes("Record/Property"));
printProperty(jobNode.selectNodes("Record/Collection/SubRecord/Property"));
}
}
public static void printProperty(List propertyNodeList) {
for (Node propertyNode : propertyNodeList) {
System.out.println(propertyNode.getUniquePath() + ">>" + propertyNode.selectSingleNode("@Name").getText() + ":" + propertyNode.getText());
}
}
}
追问还有个问题请教下,如果是比较大的xml文件大概300M左右大小,使用ElementHandler来解析的话该如何去写呢?追答就是实现ElementHandler接口,在onEnd的时候取节点元素的信息。

import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.ElementHandler;
import org.dom4j.ElementPath;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
public class XmlTest2 {
public static void main(String[] args) {
SAXReader reader = new SAXReader();
reader.setEncoding("UTF-8");
Document doc = null;
try {
File file = new File("test2.xml");
reader.addHandler("/DSExport/Job", new MyElementHandle());
doc = reader.read(file);
// printNode(doc.selectNodes("DSExport/Job"));
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void printNode(List nodeList) {
for (Node jobNode : nodeList) {
printProperty(jobNode.selectNodes("Record/Property"));
printProperty(jobNode.selectNodes("Record/Collection/SubRecord/Property"));
}
}
public static void printProperty(List propertyNodeList) {
for (Node propertyNode : propertyNodeList) {
System.out.println(propertyNode.getUniquePath() + ">>" + propertyNode.selectSingleNode("@Name").getText() + ":" + propertyNode.getText());
}
}
}
class MyElementHandle implements ElementHandler {
@Override
public void onStart(ElementPath path) {}
@Override
public void onEnd(ElementPath path) {
Element row = path.getCurrent();
XmlTest2.printProperty(row.selectNodes("Record/Property"));
XmlTest2.printProperty(row.selectNodes("Record/Collection/SubRecord/Property"));
row.detach();
}
}上面注意我实现了ElementHandler接口的类MyElementHandler。

BTW,希望你能多看看api,自己也能轻易找到解决办法的。
全部回答
mnnjnjnjjnjnjn
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
我想中午去同学家
孔雀鱼母鱼下了很多黄色圆球,是什么?
从广州芳村地铁站坐地铁由芳村一号线上车到烈
“寓言”的“寓”是什么意思?
奔驰C260L运动型2015款有没有这种蓝色,我图
新西兰的塔库麦卢卡蜂蜜跟麦利卡麦卢卡蜂蜜这
简述鲁滨逊在荒岛上驯养野兽山羊的过程
爱笑会议室为什么解散
who helps bob?怎么回答
现在30岁一次性把社保买断以后可享受些什麼
钱塘传奇最后揭穿换太子之事了吗
36/(x+7)=15/x求x=?
读技校也有班长跟组长么
王家岭村地址在哪,我要去那里办事,
家里听到鱼缸流水声是好事吗
推荐资讯
双色糕怎么做
2014年中国人口达14忆有什么感想
玛瑙与玉石的区别推荐
<妪>这个字怎么读
求亚运一首歌,有部分歌词
喝牛奶可以长高吗?
从增城到罗岗香雪公园怎样坐公交车?
我想找一个上白班8小时的工作,工资在35OO元
泊头三级心理咨询师机构收费
十一月最适合去哪旅游,景点有什么?
昨天买了一台48寸海尔电视4k,链接我家网络的
农历38年7月26日,公历是什么
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?