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>

 

posted @ 2021-12-12 17:43  差点饿死  阅读(174)  评论(0)    收藏  举报