初学DOM4J解析xml文件,及对xml文件的增删改查
程序员文章站
2022-04-30 09:59:59
...
基本概念:XML(eXtensible Markup Language),是一种可扩展的标记语言,类似HTML(超文本标记语言)
前期工作:
- 下载dom4j的jar包 (我使用的是1.6.1版本)jar下载链接.
- 在eclipse中导入jar包
- 准备好一个需要解析的xml文件
- 创建SAXReader对象,读取xml文件
- 调用read方法,返回document对象
- 获取文档中元素
- 注意:创建的工程千万千万别写中文,今天因为创建工程时图方便直接写了(xml解析) 然后报错找了接近一个小时,在网上百度各种方式 ,(编码格式等等)全都没解决,最后才发现是自己路径有(解析)两个中文
- 下图是需要解析的xml 文件 直接上代码
//将每个方法中需要用的定义成全局常量
File file=null;
SAXReader saxReader=null;
Document doc=null;
Element contacts=null;
@Before
public void testBefore() throws Exception {
//首先获取xml路径
file = new File("xml/contacts.xml");
// System.out.println(file.getAbsolutePath());//得到绝对路径
// 然后创建SAXReader 对象
saxReader = new SAXReader();
// System.out.println(saxReader);
// 之后调用read方法,传入需要解析的xml文件
doc = saxReader.read(file);
// System.out.println(doc);
// System.out.println(contacts);
contacts = doc.getRootElement();//得到xml的根节点
// System.out.println(contacts);
}
查询该xml的元素
@Test
public void testQuery() throws Exception {// 查询方法
List<Element> linkmans = contacts.elements();
// 判断 大小大于0 表示有下一级元素
if (linkmans.size() > 0 && linkmans != null) {
// 遍历获取到linkmans下的所有子元素
for (Element linkman : linkmans) {
// 获取linkman的属性和属性值
//Attribute attr = linkman.attribute("id");
//System.out.println(attr.getName() + attr.getText());
List<Element> elements = linkman.elements();
if (elements.size() > 0 && elements != null) {
for (Element element : elements) {
// 得到子节点所有的元素和值
System.out.println(element.getName() + element.getText());
}
}
}
}
// 取第一个linkman节点
Element element = linkmans.get(0);
System.out.println(element.element("name").getText()); // 取第一个节点中子节点name元素的值
}
修改方法
@Test
public void testUpdata() throws Exception {
List<Element> linkmans = contacts.elements();
Element name = linkmans.get(0).element("name");//获取第一个linkman节点下的name节点元素 然后修改该值
name.setText("豆豆");
}
//修改完后 会保存在内存中 必须执行写入步骤
@After
public void testAfter() throws Exception {
/**
* FileWriter out=new FileWriter(file); doc.write(out); out.close();
*/
// 以漂亮的方式进行输出
OutputFormat format = OutputFormat.createPrettyPrint();
// format = OutputFormat.createCompactFormat(); 这是以紧凑的方式输出
XMLWriter xmlWriter = new XMLWriter(new FileWriter(file), format);
xmlWriter.write(doc);
xmlWriter.close();
}
结果
增加的方式:
@Test
public void testAdd() throws Exception {
Element add = contacts.addElement("linkman");//增加根节点下的一级节点
add.setAttributeValue("id", "values");//给一级节点添加标签
Element name = add.addElement("name");//在一级节点下增加二级节点
name.setText("小周");//设置值
add.addElement("email").setText("aaa@qq.com");
add.addElement("address").setText("重庆");
}
删除方式:
@Test
public void testDelete() throws Exception {
List<Element> elements = contacts.elements();
Element linkman = elements.get(0);// 得到第一个linkman
// Element name = linkman.element("name");
// name.getParent().remove(name);//删除第一个linkman下的name
// linkman.getParent().remove(linkman);//删除整个linkman
//注意 删除节点时需要找到删除节点的父级节点,然后在进行删除
}