Dom4j解析xml

1、导入dom4j提供的jar包

2、查询xml(以下面xml为例)


<person>
    <p1>
        <name>zhangsanname>
        <age>20age>
    p1>
    <p1>
    	<name>lisiname>
        <age>30age>
    p1>
person>

(1)例如查询所有name元素的值

//1、创建解析器
SAXReader reader = new SAXReader();
//2、得到document
Document document = reader.read(url); //url是xml文档的路径
//3、得到根节点
getRootElement();
//4、得到所有p1标签
List<Element> elements = rootElement.elements("p1");
//5、得到name标签
//6、得到name里面的值
element.element("name").getText();

3、元素的插入操作

(1)向xml文档某标签末尾中插入标签(向第一个p1标签中插入性别)

//1、获取document
Document document = new SAXReader().read("src/www/testXML/Person.xml");
//2、获取根节点和第一个p1节点
Element rootElement = document.getRootElement();
Element element = rootElement.element("p1");
//3、创建sex标签和标签内容
Element sex = p1.addElement("sex");
sex.setText("women");

//4、将插入操作写回xml文档中
//写回格式化 OutputFormat.createPrettyPrint() 可以有缩进的格式
XMLWriter xmlWriter = new XMLWriter(newFileOutputStream("src/www/testXML/Person.xml"),
                OutputFormat.createPrettyPrint()); 
xmlWriter.write(document);
xmlWriter.close();

(2)在特定位置添加元素(在第一个p1下面的age标签之前添加school标签)

//1、创建解析器,得到根节点和第一个p1节点
Document document = getDocument();
Element p1 = document.getRootElement().element("p1");

//2、创建要添加的元素
Element school = DocumentHelper.createElement("school");
school.setText("edu.com");

//3、将新元素插入指定位置(插入List集合中)
List<Element> elements = p1.elements();
elements.add(0, school);

//4、将插入操作写回xml文档中
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/www/testXML/Person.xml"),
                OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();

4、元素的修改操作

//1、创建解析器
Document document = getDocument();
Element p1 = document.getRootElement().element("p1");

//2、得到要修改的值,并修改
Element age = p1.element("age");
age.setText("0");

//3、将操作写回
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/www/testXML/Person.xml"),
                OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();

5、节点的删除(删除第一个p1下的school)

//1、创建解析器,并得到要删除的节点
Document document = getDocument();
Element p1 = document.getRootElement().element("p1");
Element school = p1.element("school");

//2、通过父节点删除指定节点
school.getParent().remove(school);

//3、将操作写回
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/www/testXML/Person.xml"),
                OutputFormat.createPrettyPrint());
xmlWriter.write(document);
xmlWriter.close();

6、使用dom4j获取属性(获取第一个p1里面的id1)

//使用 attributeValue();方法
Document document = getDocument();
Element p1 = document.getRootElement().element("p1");
String id1 = p1.attributeValue("id1");
System.out.println(id1);

7、xpath操作

执行该操作可以直接获取到某个元素

(1)第一种书写形式

​ /AAA/BBB/CCC:表示一层一层的,AAA下面 BBB下面的 CCC

(2)第二种书写形式

​ //BBB:表示和这个名称相同,表示只要名称是BBB,都得到

(3)第三种书写形式

​ /*:表示所有元素

(4)第四种书写形式

​ ** BBB[1] :表示第一个BBB元素

​ ** BBB[last()]:表示最后一个BBB元素

(5)第五种书写形式

​ //BBB[@id]:表示只要BBB元素上面有id属性,都得到

(6)第六种书写形式

​ ** //BBB[@id=‘b1’]:表示元素名称是BBB,在BBB上面有id属性,并且id属性值为b1

8、使用dom4j支持xpath具体操作

默认情况下。dom4j不支持xpath,如果想使用,则需要进行一下操作

(1)需要引入支持xpath的jar包。

(2)在dom4j里面提供了两个方法,用来支持xpath

  • selectNodes(“xpath表达式”); 表示获取多个节点
  • selectSingleNode(“xpath表达式”); 表示获取一个节点

你可能感兴趣的:(知识点总结)