Java实现——Dom4j读写XML文件

1. dom4j概述

解析DOM4J是一个开源XML解析包,采用了Java集合框架并完全支持DOM,SAX和JAXP。最大的特色是使用了大量的接口,主要接口都在org.dom4j里定义。

2. dom4j的使用

2.1 Doucment相关用法

2.11 解析XML文件,获得Document对象

SAXReader reader = new SAXReader();
Document   document = reader.read(new File("input.xml"));

2.12 解析字符串,获得Document对象

 String text = "<members></members>";
 Document document = DocumentHelper.parseText(text);

2.13 无脑自建Document对象

Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 创建根节点

2.2 节点相关用法

2.21 获得文档根节点

 Element rootElm = document.getRootElement();

2.22 获得某个节点下的指定子节点

Element memberElm = root.element("member");// "member"是节点名 root为某个节点

2.23 获得节点下的文字

String text = memberElm.getText();
String text = root.elementText("name");

2.24 遍历取得某节点下名为member的所有子节点

List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
    Element elm = (Element) it.next();
   // do something
}

2.25 遍历取得某节点下的所有子节点

 for (Iterator it = root.elementIterator();it.hasNext();){
       Element element = (Element) it.next();
       // do something
 }

2.26 A节点下 Add/Delete B节点

Element B = A.addElement("age");
A.remove(B);

2.27 在根节点下添加一个CDATA节点

Element contentElm = root.addElement("content");
contentElm.addCDATA("Hello");
 // 特别说明:获取节点的CDATA值与获取节点的值是一个方法
System.out.println("contentElm.getText() " + contentElm.getText());

2.3 属性相关用法

2.31 取得根节点下的某属性

Element root=document.getRootElement();    
Attribute attribute=root.attribute("size");// 属性名name

2.32 取得/设置为(Set)上面该属性的文字

String text=attribute.getText();

2.33 遍历根节点下的所有属性

  Element root=document.getRootElement();    
            for(Iterator it=root.attributeIterator();it.hasNext();){
                 Attribute attribute = (Attribute) it.next();
                 String text=attribute.getText();
                 System.out.println(text);
             }

2.34 设置某个节点的属性和文字

element.addAttribute("name", "sitinspring");

2.35 为某节点添加和删除属性

// 新建student.xml文件并新增内容
Document document = DocumentHelper.createDocument();
Element root = document.addElement("学生信息");
Element student = root.addElement("学生");
student.addAttribute("sid", "001");
Attribute attribute = <span style="font-family: 微软雅黑, sans-serif;">student</span>.attribute("sid");// 属性名name
<span style="font-family: 微软雅黑, sans-serif;">student</span><span style="font-family: 微软雅黑, sans-serif;">.remove(attribute);</span>

2.4 文档最后写入MXL文件

OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");    // 指定XML编码        
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"),format);
writer.write(document);
writer.close();

2.5 字符串与XML的转换

2.51  字符串 To XML

String text = "<members> <member>sitinspring</member> </members>";
Document document = DocumentHelper.parseText(text);

2.52  XML To 字符串

SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));            
Element root = document.getRootElement();                
String docXmlText = document.asXML();
String rootXmlText= root.asXML();
Element memberElm = root.element("member");
String memberXmlText = memberElm.asXML();

2.6 格式化转义字符问题请查看这篇链接文

3. 最后一个简单的小例子,看看注释和输出结果,很容易理解。就不多解释了。

程序连续运行两次输出结果如下:

import java.io.File;
import java.io.FileWriter;
import java.util.Iterator;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
public class XML{
    public static void main(String[] args) {
        try {
            XMLWriter writer = null;// 声明写XML的对象
            SAXReader reader = new SAXReader();

            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("GBK");// 设置XML文件的编码格式

            String filePath = "d:\\student.xml";//文件路径
            File file = new File(filePath);
            if (file.exists()) {
                Document document = reader.read(file);// 读取XML文件
                Element root = document.getRootElement();// 得到根节点
                boolean add_new = false;
                for (Iterator i = root.elementIterator(); i.hasNext();) {
                    Element student = (Element) i.next();
                    if (student.attributeValue("sid").equals("001")) {
                        //获取并修改学生sid=001的学生信息
                    	Element info_num = student.element("编号");
                        System.out.println("sid为001的该属性名为 - " + info_num.getName());
                        System.out.println("sid为001的该属性值为 - " + info_num.getText());
                        
                        Element info_name = student.element("姓名");
                        System.out.println("sid为001的该属性名为 - " + info_name.getName());
                        System.out.println("sid为001的该属性值为 - " + info_name.getText());
                        
                        info_name.setName("外号");
                        info_name.setText("余小二");
                        System.out.println("sid为001的同学新属性名为 - " + info_name.getName());
                        System.out.println("sid为001的同学新属性值为 - " + info_name.getText());

                        writer = new XMLWriter(new FileWriter(filePath), format);
                        writer.write(document);
                        writer.close();
                        add_new = true;
                        break;
                    }
                }
                if (add_new) {
                    // 添加一个学生信息
                    Element student = root.addElement("学生");
                    student.addAttribute("sid", "100");
                    Element sid = student.addElement("编号");
                    sid.setText("100");
                    Element name = student.addElement("姓名");
                    name.setText("老大");
                    Element sex = student.addElement("性别");
                    sex.setText("男");
                    Element age = student.addElement("年龄");
                    age.setText("40");

                    writer = new XMLWriter(new FileWriter(filePath), format);
                    writer.write(document);
                    writer.close();
                }
            } else {
                // 新建student.xml文件并新增内容
                Document document = DocumentHelper.createDocument();
                Element root = document.addElement("学生信息");
                Element student = root.addElement("学生");
                student.addAttribute("sid", "001");
                Element id = student.addElement("编号");
                id.setText("001");
                Element name = student.addElement("姓名");
                name.setText("寂寞");
                Element age = student.addElement("年龄");
                age.setText("18");

                writer = new XMLWriter(new FileWriter(file), format);
                writer.write(document);
                writer.close();
            }
            System.out.println("操作结束! ");
        } catch (Exception e) {
            e.printStackTrace();
        }
}

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要使用Java中的一个XML处理库,比如dom4j,来读写XML文件。接着,我们可以通过HTTP发送POST请求,并将XML参数作为请求体发送到接口。 以下是一个示例代码,演示了如何使用dom4j读取XML文件,并将XML参数作为请求体发送到API获取返回内容: ```java import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.Iterator; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class Main { public static void main(String[] args) throws Exception { // 读取XML文件 String xmlFilePath = "path/to/xml/file.xml"; SAXReader reader = new SAXReader(); Document document = reader.read(xmlFilePath); // 获取XML参数 Element root = document.getRootElement(); String logisticsNo = root.elementText("logisticsNo"); String appKey = root.elementText("appKey"); String appSecret = root.elementText("appSecret"); // 发送HTTP请求 String apiUrl = "http://api.example.com/wishPost"; URL url = new URL(apiUrl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/xml"); // 设置请求体 String requestBody = "<request><logisticsNo>" + logisticsNo + "</logisticsNo><appKey>" + appKey + "</appKey><appSecret>" + appSecret + "</appSecret></request>"; conn.setDoOutput(true); conn.getOutputStream().write(requestBody.getBytes("UTF-8")); // 获取返回内容 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuilder stringBuilder = new StringBuilder(); String line; while ((line = reader.readLine()) != null) { stringBuilder.append(line); } reader.close(); String response = stringBuilder.toString(); System.out.println(response); } } ``` 需要注意的是,这只是一个示例代码,需要根据实际情况进行修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值