目录
目录
test.xml
<?xml version="1.0" encoding="UTF-8"?>
<breakfast_menu>
<food>
<name>Belgian Waffles</name>
<price>$5.95</price>
<description>Two of our famous Belgian Waffles with plenty of real maple syrup</description>
<calories>650</calories>
</food>
<food>
<name>Strawberry Belgian Waffles</name>
<price>$7.95</price>
<description>Light Belgian waffles covered with strawberries and whipped cream</description>
<calories>900</calories>
</food>
<food>
<name>Berry-Berry Belgian Waffles</name>
<price>$8.95</price>
<description>Light Belgian waffles covered with an assortment of fresh berries and whipped cream</description>
<calories>900</calories>
</food>
<food>
<name>French Toast</name>
<price>$4.50</price>
<description>Thick slices made from our homemade sourdough bread</description>
<calories>600</calories>
</food>
<food>
<name>Homestyle Breakfast</name>
<price>$6.95</price>
<description>Two eggs, bacon or sausage, toast, and our ever-popular hash browns</description>
<calories>950</calories>
</food>
</breakfast_menu>
添加Maven依赖/可替换jar包
<dependencies>
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<!-- https://mvnrepository.com/artifact/org.dom4j/dom4j -->
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>2.1.4</version>
</dependency>
<dependency>
<groupId>jaxen</groupId>
<artifactId>jaxen</artifactId>
<version>1.2.0</version>
</dependency>
</dependencies>
</dependencyManagement>
1、遍历节点,输出内容
对test.xml文件进行处理,实现遍历所有节点,并输出节点内容
public static void read(){
try {
//使用解析器对象读取xml文档,生成document对象
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
Element rootElement = document.getRootElement();
System.out.println("test.xml文件的根节点名字是"+rootElement.getName());
System.out.println("---------------");
List<Element> testsSubElementList=rootElement.elements();
System.out.println("1.遍历所有节点,和节点内容");
for (Element testelement:testsSubElementList) {
System.out.println("test.xml下的节点名为"+testelement.getName());
List<Element> testSubElementList = testelement.elements();
for (Element testSubelement : testSubElementList) {
System.out.println("节点的标签名"+testSubelement.getName());
System.out.println("节点的标签下的内容"+testSubelement.getText());
}
System.out.println('\n');
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
2、增加节点
增加一个food节点,节点中包含相同的子节点
public static void add(){
try {
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
Element rootElement = document.getRootElement();
System.out.println("---------------");
System.out.println("2.增加一个food节点,节点中包含相同的子节点");
Element newelement=rootElement.addElement("food");
Element name = newelement.addElement("name");
name.addText("apple");
Element price=newelement.addElement("price");
price.addText("$8.95");
Element description=newelement.addElement("description");
description.addText("is red");
Element calories = newelement.addElement("calories");
calories.addText("200");
//保存xml
saveXml("src/main/resources/test.xml");
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
3、删除刚增加的节点
删除增加的节点
public static void delete(){
try {
System.out.println("---------------");
System.out.println("3.删除增加的节点");
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
Element rootElement = document.getRootElement();
List<Element> elements=rootElement.elements("food");
Element deleteelement = elements.get(elements.size()-1);
rootElement.remove(deleteelement);
saveXml("src/main/resources/test.xml");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
4、节点内容查询
按节点的内容查询节点是否存在
public static void select(){
String str="不存在";
try {
System.out.println("---------------");
System.out.println("4.按节点的内容查询节点是否存在");
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
List list=document.selectNodes("/breakfast_menu/food");
Iterator iterator=list.iterator();
while (iterator.hasNext()){
Element element1=(Element) iterator.next();
if(element1.elementText("name").equals("apple")){
str="存在";
System.out.println(str);
break;
}
}
if (str.equals("不存在")) System.out.println(str);
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
5、整体代码
public class Dom4jParseTestXmlTest {
private static Document document;
//创建解析器对象
private static SAXReader saxReader = new SAXReader();
public static void main(String[] args) {
// read();
// add();
//delete();
select();
}
public static void read(){
try {
//使用解析器对象读取xml文档,生成document对象
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
Element rootElement = document.getRootElement();
System.out.println("test.xml文件的根节点名字是"+rootElement.getName());
System.out.println("---------------");
List<Element> testsSubElementList=rootElement.elements();
System.out.println("1.遍历所有节点,和节点内容");
for (Element testelement:testsSubElementList) {
System.out.println("test.xml下的节点名为"+testelement.getName());
List<Element> testSubElementList = testelement.elements();
for (Element testSubelement : testSubElementList) {
System.out.println("节点的标签名"+testSubelement.getName());
System.out.println("节点的标签下的内容"+testSubelement.getText());
}
System.out.println('\n');
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void add(){
try {
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
Element rootElement = document.getRootElement();
System.out.println("---------------");
System.out.println("2.增加一个food节点,节点中包含相同的子节点");
Element newelement=rootElement.addElement("food");
Element name = newelement.addElement("name");
name.addText("apple");
Element price=newelement.addElement("price");
price.addText("$8.95");
Element description=newelement.addElement("description");
description.addText("is red");
Element calories = newelement.addElement("calories");
calories.addText("200");
//保存xml
saveXml("src/main/resources/test.xml");
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
public static void delete(){
try {
System.out.println("---------------");
System.out.println("3.删除增加的节点");
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
Element rootElement = document.getRootElement();
List<Element> elements=rootElement.elements("food");
Element deleteelement = elements.get(elements.size()-1);
rootElement.remove(deleteelement);
saveXml("src/main/resources/test.xml");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public static void select(){
String str="不存在";
try {
System.out.println("---------------");
System.out.println("4.按节点的内容查询节点是否存在");
document=saxReader.read(Dom4jParseTestXmlTest.class.getClassLoader().getResource("test.xml"));
List list=document.selectNodes("/breakfast_menu/food");
Iterator iterator=list.iterator();
while (iterator.hasNext()){
Element element1=(Element) iterator.next();
if(element1.elementText("name").equals("apple")){
str="存在";
System.out.println(str);
break;
}
}
if (str.equals("不存在")) System.out.println(str);
} catch (DocumentException e) {
throw new RuntimeException(e);
}
}
public static void saveXml(String filePath){
try {
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter writer =new XMLWriter(new FileWriter(filePath),format);
writer.write(document);
writer.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}