java --- Xml数据解析

本文介绍了如何在Java中解析XML数据,包括导入相关jar包,使用DOM和SAX两种方式解析XML,展示获取元素和内容的方法,以及如何修改和输出XML内容。示例代码详细展示了遍历XML节点的过程。

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

java — Xml数据解析

  • 首先先导入jar包
    //解析这里写代码片

    //常用的获取内容的方法

这里写代码片
public static void demo1() throws DocumentException {
    SAXReader sax = new SAXReader();
    File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");
    //读取文件内容,将内容以Document的形式呈现
    Document document = sax.read(file);
    //1. 获取根节点(students)
    Element root = document.getRootElement();
    //获取根节点名称 - (students)
    System.out.println("根节点名称: " + root.getName());
    //2. 获取节点内容 - (无)
    System.out.println("根节点内容:  " + root.getTextTrim());
    //3. 获取子节点
    List<Element> elements = root.elements();
    System.out.println("子节点名称: " + elements.get(1).getName());
    // 打印子节点的名字
    System.out.println("子节点内容: " + elements.get(1).getTextTrim());
    //"孙子节点" 获取student1的子节点
    List<Element> subEs = elements.get(0).elements();
    //打印student1的子节点的名字name
    System.out.println("孙子节点的名称: " + subEs.get(0).getName());
    //打印student的子节点的内容(本平)
    System.out.println("孙子节点的内容: " + subEs.get(0).getTextTrim());

    //练习: 使用for循环/for-each循环,
    // 打印xml文件中所有标签的名字及内容
    //提示:循环嵌套
}

public static void demo2() throws DocumentException {

    //方式一 for循环
    SAXReader sax = new SAXReader();
    File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");
    //读取文件内容,将内容以Document的形式呈现
    Document document = sax.read(file);
    //1. 获取根节点(students)
    Element root = document.getRootElement();
    getNodes(root);

// List elements = root.elements();
// for (int i = 0; i < elements.size(); i++) {
// elements.get(i).getName();
// elements.get(i).getTextTrim();
// List subes = elements.get(i).elements();
// for (int j = 0; j < subes.size(); j++) {
// subes.get(j).getName();
// subes.get(j).getTextTrim();
// System.out.println(“根节点名称: ” + root.getName() + “子节点名称: ”
// + elements.get(i).getName()
// + “孙子节点的名称: ” + subes.get(j).getName() + “孙子节点的内容: ” + subes.get(j).getTextTrim());
// }
// }

// //方式二 for-each循环
// System.out.println(“根节点名称: ” + root.getName());
// //2. 获取节点内容 - (无)
// System.out.println(“根节点内容: ” + root.getTextTrim());
// for (Element e : elements) {
// System.out.println(“子节点名称: ” + e.getName());
// //2. 获取节点内容 - (无)
// System.out.println(“子节点内容: ” + e.getTextTrim());
// List subEs = e.elements();
// for (Element e1 : subEs) {
// System.out.println(“孙子节点名称: ” + e1.getName());
// // 打印子节点的名字
// System.out.println(“孙子节点内容: ” + e1.getTextTrim());
// }
// }
}

//通用的遍历方式 - 递归
//参数为任意需要遍历的节点
public static void getNodes(Element node) throws DocumentException {
    System.out.println("当前节点名称: " + node.getName());
    System.out.println("当前节点内容:  " + node.getTextTrim());
    List<Attribute> attr = node.attributes();
    for (Attribute a : attr) {
        System.out.println("属性名称: " + a.getName());
        System.out.println("属性值: " + a.getValue());
    }
    //获取子节点
    List<Element> elements = node.elements();
    //遍历所有子节点
    for (Element e : elements) {
        //递归, 调用自己
        getNodes(e);
    }
}

//属性
public static void demo3() throws DocumentException {
    SAXReader sax = new SAXReader();
    File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");
    //读取文件内容,将内容以Document的形式呈现
    Document document = sax.read(file);
    //1. 获取根节点(students)
    Element root = document.getRootElement();

    List<Element> elements = root.elements();
    //获取student1节点
    Element stu1 = elements.get(0);

    //通过名字直接获取
    //注意: 只能获取一级标签
    Element e = stu1.element("name");
    System.out.println(e.getName());
    System.out.println(e.getTextTrim());

    //通过名字直接获取值
    String str = stu1.elementText("name");
    System.out.println(str);

    //通过名字直接获取属性
    Attribute att = stu1.attribute("id");
    System.out.println(att.getName());
    System.out.println(att.getValue());

    //通过名字直接获取属性值
    String str1 = stu1.attributeValue("id");
    System.out.println(str1);

    //当前节点的所有属性
    List<Attribute> attr = stu1.attributes();
    //属性名(id)
    System.out.println("属性名: " + attr.get(0).getName());
    //属性值(001)
    System.out.println("属性值: " + attr.get(0).getValue());


    //for循环遍历
    for (int i = 0; i < elements.size(); i++) {
        List<Attribute> attre = elements.get(i).attributes();
        for (int j = 0; j < attre.size(); j++) {
            attre.get(j).getName();
            attre.get(j).getValue();
            System.out.println("属性名字: " + attre.get(j).getName() + "属性值: " + attre.get(j).getValue());
        }
    }

    //for-each遍历
    for (Attribute a : attr) {
        System.out.println("属性名字: " + a.getName() + "属性值: " + a.getValue());

    }


}

//属性的增删改查
public static void demo4() throws DocumentException {

    SAXReader sax = new SAXReader();
    File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");
    //读取文件内容,将内容以Document的形式呈现
    Document document = sax.read(file);
    //1. 获取根节点(students)
    Element root = document.getRootElement();
    //先获取有属性的节点student1
    Element stu1E = root.element("student1");
    //获取属性
    Attribute idA = stu1E.attribute("id");
    //删除属性
    stu1E.remove(idA);
    //添加/修改属性
    //如参数1存在,即修改
    //不存在,就添加
    stu1E.addAttribute("id", "新id 值");
    //输出改变后的student1
    getNodes(stu1E);

}

//节点的增删改查
public static void demo5() throws DocumentException, IOException {
    SAXReader sax = new SAXReader();
    File file = new File("/Users/dllo/Documents/Class11_XML/src/com/company/student.xml");
    //读取文件内容,将内容以Document的形式呈现
    Document document = sax.read(file);
    //1. 获取根节点(students)
    Element root = document.getRootElement();
    //先获取有属性的节点student1
    Element stu1E = root.element("student1");
    //添加新的节点phone
    Element phoneE = stu1E.addElement("phone");
    //为节点设置值
    phoneE.setText("133XXXXXXXX");
    stu1E.remove(phoneE);
    //删除节点
    Element nameE = stu1E.element("name");

// stu1E.remove(nameE);
//修改
nameE.setText(“张然2”);
getNodes(stu1E);

    writeToFile(document);
}

//将改动写入到文件中
public static void writeToFile(Document document) throws DocumentException, IOException {
    //中文字符
    //输出格式

// OutputFormat format = OutputFormat.createCompactFormat();
// //设置编码
// format.setEncoding(“GBK”);
// File file = new File(“/Users/dllo/Documents/Class11_XML/src/com/company/student.xml”);
// FileWriter fileWriter = new FileWriter(file);
// XMLWriter xmlWriter = new XMLWriter(fileWriter, format);
// xmlWriter.write(document);
// xmlWriter.close();

    OutputFormat format = OutputFormat.createPrettyPrint();
    format.setEncoding("UTF-8");
    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/com/company/student.xml"), format);
    xmlWriter.write(document);
    xmlWriter.close();
}

//将字符串转化成XML
public static void demo6() throws DocumentException, IOException {
    String text = "<members><member>aaa</member></members>";
    Document document = DocumentHelper.parseText(text);
    writeToFile(document);
}

// 将XML转化为字符串
public static void demo7() throws DocumentException, IOException {
SAXReader sax = new SAXReader();
File file = new File(“/Users/dllo/Documents/Class11_XML/src/com/company/student.xml”);
//读取文件内容,将内容以Document的形式呈现
Document document = sax.read(file);
Element root = document.getRootElement();
//将document整体转为字符串
String docStr = document.asXML();
System.out.println(docStr);
System.out.println(“_________________”);

    //将root根节点整体转为字符串
    String rootStr = root.asXML();
    System.out.println(rootStr);
    System.out.println("___________________________");
    //将一个节点转为字符串
    String stu1 = root.element("student1").asXML();
    System.out.println(stu1);

}

//http://write.blog.youkuaiyun.com/mdeditor

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值