DOM4J读取XML文档数据

本文介绍了XML文档的基本结构和要求,强调了其在数据持久化和交换中的应用。核心讲解了DOM4J作为第三方类库在处理XML时的作用,并提供了在Maven项目中引入DOM4J依赖的方法,以及如何输出XML文件的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XML文档结构

XML

  • 使用简单标记来描述数据
  • 可扩展标记语言

在这里插入图片描述
XML文档要求

  • 必须有XML声明语句
  • 必须有且仅有一个根元素
  • 标签大小写敏感 属性值用双引号包裹
  • 标签成对
  • 元素正确嵌套

主要应用场景(作用):
• 数据持久化
• 数据交换
• 参数配置

核心类
在这里插入图片描述

一般情况下使用XML都是用第三方类库

实例
创建maven项目
在maven项目中的pom文件中导入DOM4j类
在这里插入图片描述
在pom文件中导入xml的依赖 DOM4 在maven仓库中可以查到
输出xml文件
代码:

public class XmlTest {
    public static void main(String[] args) {
        //指定xml文档
        File f=new  File("xml/data.xml");
        File path=new  File("xml/");
        if(!path.exists()){
            path.mkdir();
        }
        //XML解析器
        SAXReader saxReader=new SAXReader();
        try{
            //加载本地xml
            //Document document=saxReader.read(f);
            Document document = DocumentFactory.getInstance().createDocument("utf-8");//设置编码格式
            Element root = document.addElement("root");//建立结点
            Element row1 = DocumentHelper.createElement("row");//建立结点
            Element newsid1 = DocumentHelper.createElement("newsid");//建立结点
            Element title1 = DocumentHelper.createElement("title");//建立结点
            newsid1.addText("1");
            title1.addText("今天香港机场停运了");
            Element row2 = DocumentHelper.createElement("row");
            Element newsid2 = DocumentHelper.createElement("newsid");
            Element title2 = DocumentHelper.createElement("title");
            newsid2.addText("2");
            title2.addText("香港闹革命,要打击");
            root.add(row1);//在root里面嵌套row
            root.add(row2);//在root里面嵌套row
            row1.add(newsid1);//在row中嵌套ID
            row1.add(title1);//在row中嵌套title
            row2.add(newsid2);
            row2.add(title2);
            //设定输出格式
            //OutputFormat format=OutputFormat.createCompactFormat();//无空白
            OutputFormat format=OutputFormat.createPrettyPrint();//有空白
            FileOutputStream outputStream = new FileOutputStream(f);
            XMLWriter writer=new XMLWriter(outputStream ,format);
            writer.write(document);
            writer.close();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

导入XML文件

public class XmlTest2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //指定xml文档
        File f = new File("xml/data.xml");
        File path = new File("xml/");
        if (!path.exists()) {
            path.mkdir();
        }
        //XML解析器
        SAXReader saxReader = new SAXReader();
        try {
            //加载本地xml
            Document document = null;
            Element root = null;
            if (f.exists()) {
                document = saxReader.read(f);
                root = document.getRootElement();
            } else {
                document = DocumentFactory.getInstance().createDocument("utf-8");
                root = document.addElement("root");
            }
            while (true) {
                System.out.println("请输入你要维护的数据:(insert 追加 delete 删除 exit 退出):");
                String cmd = scanner.next();
                if (cmd.equals("exit")) {
                    break;
                }else if(cmd.equals("insert")) {
                    Element row = DocumentHelper.createElement("row");//设置结点
                    Element newsidElement = DocumentHelper.createElement("newsid");//设置结点
                    Element titleElement = DocumentHelper.createElement("title");//设置结点
                    Integer id = scanner.nextInt();
                    String title = scanner.next();
                    newsidElement.addText(id.toString());
                    titleElement.addText(title);
                    row.add(newsidElement);
                    row.add(titleElement);
                    root.add(row);
                }else if(cmd.equals("delete")){
                    System.out.println("请输入要删除数据的新闻编号");
                    Integer id = scanner.nextInt();
                    //遍历整篇xml文档
                    for(Object obj : root.elements()){
                        Element row = (Element)obj;
                        if(row.element("newsid").getText().equals(id.toString())){
                            root.remove(row);
                        }
                    }
                }
            }
            //设定输出格式
            //OutputFormat format=OutputFormat.createCompactFormat();//无空白
            OutputFormat format = OutputFormat.createPrettyPrint();//有空白
            FileOutputStream outputStream = new FileOutputStream(f);
            XMLWriter writer = new XMLWriter(outputStream, format);
            writer.write(document);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
  	  }
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值