1 DOM4j
DOM4j是非常优秀的Java XML API,性能优异、功能强大,开放源代码。使用DOM4j解析XML时,需要导入DOM4j的jar包,可以在官网下载。
2 DOM4j获取Document对象
步骤如下:
1.创建SAXReader对象
SAXReader reader=new SAXReader()
2.通过SAXReader对象获取Document()对象
Document document=reader.read(url)
public static void main(String[] args) {
//将xml文件转换成Document对象
SAXReader reader=new SAXReader();
try {
//这里的Document是org.dom4j包中的
Document document=reader.read("手机信息.xml");
} catch (DocumentException e) {
e.printStackTrace();
}
}
3 访问DOM4j节点
XML文件如下:
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<phoneInfo>
<brand name="华为手机">
<type name="华为荣耀" />
<type name="HW123" />
<type name="RY321" />
</brand>
<brand name="小米手机">
<type name="小米10" />
<type name="红米" />
<type name="Rednote" />
</brand>
</phoneInfo>
3.1 显示xml文件内容
//显示XML文件内容
public static void showXml(){
//获取xml的元素根节点:getRootElement()
Element root=document.getRootElement();
//将root里的元素放到元素迭代器itBrand中
Iterator itBrand=root.elementIterator();
//遍历元素迭代器itBrand
while (itBrand.hasNext()) {
Element brand = (Element) itBrand.next();
//通过属性获得属性值:attributeValue(String name)
System.out.println(brand.attributeValue("name"));
//将brand里的元素放到元素迭代器中
Iterator itType=brand.elementIterator();
while (itType.hasNext()) {
Element type = (Element) itType.next();
System.out.println("\t"+type.attributeValue("name"));
}
}
}
3.2 保存xml文件
//将数据保存到指定路径的xml文件中的方法,需要传递一个指定路径参数path
public static void saveXml(String path){
//内存中的数据写到XML中使用XMLWriter类
XMLWriter writer=null;
try {
//创建XMLWriter对象,传递参数是字符流Writer和格式format
OutputFormat format=OutputFormat.createPrettyPrint();//创建一个完美输出格式
//设置编码格式
format.setEncoding("utf-8");
writer=new XMLWriter(new FileWriter(path), format);
//写入xml文件中
writer.write(document);
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3.3 添加DOM4j节点
添加节点主要通过父节点调用addELement("子节点名称")方法实现。
//添加xml数据
public static void addXml(){
//获取元素根节点
Element root=document.getRootElement();
//添加brand节点:addElement("brand")
Element brand=root.addElement("brand");
//添加brand节点的属性名、属性值
brand.addAttribute("name", "三星");
//添加type子节点:addElement("type")
Element type1=brand.addElement("type");
//添加type节点的属性、属性名
type1.addAttribute("name", "Galay");
Element type2=brand.addElement("type");
type2.addAttribute("name", "Note4");
//将添加的数据保存到指定路径的Xml文件中
saveXml("手机信息.xml");
}
3.4 修改 DOM4j节点
通过addAttribute(String name,String value)可以实现添加属性的功能。
//修改xml数据
public static void updateXml(){
//获取元素根节点
Element root=document.getRootElement();
Iterator itBrand=root.elementIterator();
//修改第三个brand节点
int count=0;
while (itBrand.hasNext()) {
count++;
Element brand = (Element) itBrand.next();
if (count==3) {
brand.addAttribute("name", "三星手机");
}
}
saveXml("手机信息.xml");
}
3.5 删除DOM4j节点
通过父节点调用remove()方法删除。
//删除xml数据
public static void deleteXml(){
//获取元素根节点
Element root=document.getRootElement();
Iterator itBrand=root.elementIterator();
while (itBrand.hasNext()) {
Element brand = (Element) itBrand.next();
String brandName=brand.attributeValue("name");
if (brandName.equals("三星手机")) {
brand.getParent().remove(brand);
}
}
saveXml("手机信息.xml");
}