Dom4j解析xml

时间:2022-01-14 15:25:44

public class Dom4jTest { // Dom4j解析xml
// 因为所有的方法都需要Dom树
static Document document = null;
static Element root = null;

public static void main(String[] args) {
// 获取dom树
getDocument();
// addPhone();
deletePhone();
updatePhone();
showPhone();
}

// 解析xml文件
public static void getDocument() {
SAXReader reader = new SAXReader();
try {
document = reader.read("收藏信息.xml");
root = document.getRootElement();// 获取根节点
} catch (DocumentException e) {
e.printStackTrace();
}
}

/**
* 显示所有的手机信息
*/
public static void showPhone() {
// 遍历所有的节点
Iterator itBrand = root.elementIterator();
while (itBrand.hasNext()) {
Element brand = (Element) itBrand.next();
System.out.println("手机的品牌是:" + brand.attributeValue("name"));
System.out.println("手机的编号是:" + brand.attributeValue("id"));
System.out.println("===========下面是子节点============");
Iterator itType = brand.elementIterator();
while (itType.hasNext()) {// 获取手机型号
Element type = (Element) itType.next();
System.out.println("手机的型号是:" + type.attributeValue("name"));
// 输出文本节点的值
if (!type.getText().equals("")) {
System.out.println(type.getTextTrim());
}
}
}

}

// 保存xml信息
public static void save(String path) {
OutputFormat format = null;
XMLWriter writer = null;
try {
// dom4j的转换器 不用使用 new   createPrettyPrint底层有 new
format = OutputFormat.createPrettyPrint();
// 写入xml文件
writer = new XMLWriter(new FileWriter(path), format);
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 关流
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

// 新增节点
public static void addPhone() {
Element element = root.addElement("Brand");
// 节点设置属性
element.addAttribute("name", "黑莓");
// 节点下面新增子节点
Element type = element.addElement("Type");
type.addAttribute("name", "A1");
// 保存 省略 我们 节点之间的拼接! dom需要拼接
save("收藏信息.xml");
}

// 删除
public static void deletePhone() {
// 获取所有Brand
Iterator brand = root.elementIterator();
while (brand.hasNext()) {
Element element = (Element) brand.next(); // 拿到每一个Brand
// 获取属性值 判断是不是 要删除的对象
if (element.attributeValue("name").equals("黑莓")) {
element.getParent().remove(element);
}
}
save("收藏信息.xml");
}

// 修改
public static void updatePhone() {
// 获取所有Brand
Iterator brand = root.elementIterator();
while (brand.hasNext()) {
Element element = (Element) brand.next(); // 拿到每一个Brand
// 获取属性值 判断是不是 要修改的对象
if (element.attributeValue("name").equals("哇哈哈")) {
element.attribute("name").setValue("哇哈哈哈哈");
}
}
save("收藏信息.xml");
}

}

使用dom4j解析 需要引入需要的jar包