XML练习,将XML文件中的标签打印显示并进行增删
XML文件
<?xml version="1.0" encoding="UTF-8"?>
<NewPhone>
<Brand name="华为">
<Type name="U8650"/>
<Type name="HW123"/>
<Type name="HW321"/>
</Brand>
<Brand name="苹果">
<Type name="iPhone12"/>
</Brand>
</NewPhone>
class文件
public class Phone { public static void main(String[] args) throws DocumentException, IOException { //_________________________展示每个节点及他的属性信息____________________________________ SAXReader reader = new SAXReader();// 创建SAXReader 对象 Document doc = reader.read("src/NewPhone.xml");// 通过SAXReader 对象使用read方法读取xml文件 // System.out.println(doc.asXML());//打印xml文件内容 Element bq1 = doc.getRootElement(); //获取根节点--每个xml标签都是一个元素节点,根节点指最外层元素标签 System.out.println("标签名:"+bq1.getName());//打印元素根节点名称 List<Element> listy = bq1.elements();//将次外层元素标签节点存入listy集合--bq1(标签1)的第一内层节点 for (Element bq2 : listy) {//遍历元素标签 List<Attribute> lists = bq2.attributes();//将每个标签的属性——属性节点存入lists集合 for (Attribute sx1 : lists) {//遍历属性节点集合 System.out.println("\t标签名:"+bq2.getName()+" " +"属性名:"+sx1.getName()+" "+"属性值:"+sx1.getValue()); } // System.out.println(bq2.getName());//打印次外层标签名 List<Element> listy1 = bq2.elements();//获取bq2--(标签2)的第一内层标签存入集合 for (Element bq3 : listy1) { List<Attribute> lists1 = bq3.attributes(); for (Attribute sx2 : lists1) { System.out.println("\t\t标签名:"+bq3.getName()+" " +"属性名:"+sx2.getName()+" "+"属性值:"+sx2.getValue()); } } } //________________________________添加品牌___________________________ Element brand = bq1.addElement("Brand");//添加一个新的子节点(次外层节点)--子标签 brand.addAttribute("name", "oppo");//设置子标签的属性名和属性值 Element type = brand.addElement("type");//添加一个新的子节点——brand的子标签 type.addAttribute("name", "R20"); //__________写入xml文件中________________ File toFile = new File("src/NewPhone.xml");//创建写出对象文件 OutputStream outFile = new FileOutputStream(toFile); OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter write = new XMLWriter(outFile,format); OutputStream out = new FileOutputStream(toFile); XMLWriter write1 = new XMLWriter(out); write.write(doc); write.flush(); write.close(); System.out.println("结束"); //____________________________删除子标签(以苹果为例)_______________________ for (Element cbq : listy) { //遍历listy(元素标签集合) List<Attribute> sxbq = cbq.attributes();//将每个元素的属性标签存入集合sxbq Attribute attr = sxbq.get(0);//例题中的子元素标签只有一个属性,get(0)可以,获取的是: name__"xxxx" String value = attr.getValue();//获取每个属性中的value值,即 name 的值 if(value.equals("苹果")){//进行比较判断,如果属性值---name是“苹果” bq1.remove(cbq);//通过父标签来删除子标签 } } //持久化---------- File toFile2 = new File("src/NewPhone.xml");//创建新的写出文件对象 OutputStream out1 = new FileOutputStream(toFile2);//构建输出流 OutputFormat format1 = OutputFormat.createPrettyPrint();// XMLWriter writer = new XMLWriter(out1,format); writer.write(doc);//将内存中的doc 写入XML文档 writer.flush();//刷新内存 writer.close();//关闭流 System.out.println("已删除"); } }
演示结果

运行后XML文件
<NewPhone>
<Brand name="华为">
<Type name="U8650"/>
<Type name="HW123"/>
<Type name="HW321"/>
</Brand>
<Brand name="oppo">
<type name="R20"/>
</Brand>
</NewPhone>
浙公网安备 33010602011771号