XML教程

XML简单介绍

  1. XML文档内容由一系列标签元素组成
  2. 语法:
    属性值用双引号包裹
    一个元素可以有多个属性
    属性值中不能直接包含<、“、&(不建议:‘、>)
    示例:
    <元素名 属性名=“属性值”>元素内容</元素名>

转义符列表

转义符列表

XML解析

DOM:文档对象模型(Document Object Model),DOM把XML文档映射成一个倒挂的树。具体理解可以参考这里:XML解析之DOM解析详解
DOM4J 是可以快捷的修改、读取节点的Java第三方库,常用类如下:

  • SAXReader:解析器
  • Document:定义XML文档
  • Element:定义XML元素
  • Text:定义XML文本节点
  • Attribute:定义了XML 的属性
    具体使用如下:
  1. 非web工程本地文件地址获取
1.Test.class.getResource("/文件名").getPath()
2.Test.class.getClassLoader().getResource("文件名").getPath()
3.new File("").getCanonicalPath()
4.System.getProperty("user.dir")
5.System.getProperty("java.class.path")

这里建议使用第1、2种方式
2. 常用功能和说明

功能说明
sax.read(new FileInputStream(new File(f)))读取文件
document.getRootElement()获取跟节点
element.element(String name)获取指定元素
element.elements([name])批量获取(指定)元素
element.attribute()获取属性
element.attributes([name])批量获取(指定)属性
element.getTextTrim()获取文本
element.getNodeType()获取节点类型

代码示例:
book.xml

<?xml version="1.0" encoding="UTF-8"?>
<books>
    <!--图书信息 -->
    <book id="bk101">
        <author>王珊</author>
        <title>.NET高级编程</title>
        <description>包含C#框架和网络编程等</description>
    </book>
    <book id="bk102" name="wen">
        <author>李明明</author>
        <title>XML基础编程</title>
        <description>包含XML基础概念和基本作用</description>
    </book>
    <book id="bk103">
        <author>乔布斯</author>
        <title>乔布斯自传</title>
        <description>乔布斯坎坷而丰富的创业和  人生</description>
    </book>
</books>

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.util.List;

public class ReaderXml {
    public static void main(String[] args){

        // 从 src/main/java 往后找,即从当前类所属的包的同目录层级或包的子层级找,在别的包会找不到,找不到为 Null
        String path = ReaderXml.class.getResource("/book.xml").getPath();
        // 以下方法也可以找到文件,只能在包的同目录层级找,找不到为 Null
//        String path1 = ReaderXml.class.getClassLoader().getResource("book.xml").getPath();
        System.out.println(path);

        // 创建对象
        SAXReader reader = new SAXReader();
        try {
            // 获取文档
            Document doc = reader.read(new FileInputStream(path));

            // getRootElement():获取根目录
            Element rootEle = doc.getRootElement();
            // getNodeType():获取节点类型
            System.out.println(rootEle.getNodeType());
            // getNodeTypeName():获取节点类型名称
            System.out.println(rootEle.getNodeTypeName());
            // getName():获取节点名称
            System.out.println(rootEle.getName());
            System.out.println("------示例2------");
            // element(String name):根据节点名获取第一个匹配的节点
            Element bookEle = rootEle.element("book");
            System.out.println(bookEle.getName());
            System.out.println(bookEle.getTextTrim());

            System.out.println("------示例3------");
            // elements():获取所有子标签
            // elements(String name):获取节点名称匹配name的子标签
            List<Element> eles1 = rootEle.elements("book");
            for(Element e : eles1){
                // attribute(String name):根据属性名获取属性的值
                System.out.println(e.attribute("id"));
                // attributes():获取当前元素标签的所有属性
                System.out.println(e.attributes());
                // attributes(String name):获取当前元素标签的属性名称匹配name的属性值
                System.out.println(e.attributeValue("id"));
                // 属性也有以下操作:
                Attribute attr = e.attribute("id");
                // 获取属性值
                System.out.println(attr.getValue());
                List<Element> bookInfos = e.elements();
                for(Element bi : bookInfos){
                    System.out.println(bi.getName());
                    // getTextTrim():获取文本节点的内容,会将连续空格缩减为一个空格
                    // getText():获取文本节点的完整内容,不会将空格去掉
                    System.out.println(bi.getTextTrim());
                    System.out.println(bi.getText());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果:

/E:/work/java_output/production/java_code_manage/book.xml
1
Element
books
------示例2------
book

------示例3------
org.dom4j.tree.DefaultAttribute@3f102e87 [Attribute: name id value "bk101"]
[org.dom4j.tree.DefaultAttribute@3f102e87 [Attribute: name id value "bk101"]]
bk101
bk101
author
王珊
王珊
title
.NET高级编程
.NET高级编程
description
包含C#框架和网络编程等
包含C#框架和网络编程等
org.dom4j.tree.DefaultAttribute@29444d75 [Attribute: name id value "bk102"]
[org.dom4j.tree.DefaultAttribute@29444d75 [Attribute: name id value "bk102"], org.dom4j.tree.DefaultAttribute@2280cdac [Attribute: name name value "wen"]]
bk102
bk102
author
李明明
李明明
title
XML基础编程
XML基础编程
description
包含XML基础概念和基本作用
包含XML基础概念和基本作用
org.dom4j.tree.DefaultAttribute@1517365b [Attribute: name id value "bk103"]
[org.dom4j.tree.DefaultAttribute@1517365b [Attribute: name id value "bk103"]]
bk103
bk103
author
乔布斯
乔布斯
title
乔布斯自传
乔布斯自传
description
乔布斯坎坷而丰富的创业和 人生
乔布斯坎坷而丰富的创业和  人生

关于节点类型如下:
节点类型对应的值
2. 写XML
相关方法:

DocumentHelper.createDocument():创建一个虚拟文档
addElement(String name):在当前对象下添加一个元素节点
addAttribute(String name, String value):在当前对象下添加属性并给属性赋值
addCDATA(String text):在当前对象下添加CDATA节
addText(String text):在当前对象下添加文本内容
OutputFormat format = OutputFormat.createPrettyPrint():创建格式化对象,
format.setEncoding("UTF-8"):设置格式对象的字符集为UTF-8,在写XML的时候需要用到
XMLWriter(OutputStream out, OutputFormat format):创建写xml对象,将内容保存到out输出流指定的文件中

示例:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import java.io.File;
import java.io.FileOutputStream;

public class WriterXML {

    public void addBookInfo(Element e, String idValue, String authorName, String bookName) {
        Element book = e.addElement("book");
        // addAttribute(String name, String value):在当前对象下添加属性并给属性赋值
        book.addAttribute("id", idValue);
        Element author = book.addElement("author");
        // addCDATA(String text):在当前对象下添加CDATA节
        author.addCDATA(authorName);
        Element Name = book.addElement("name");
//        Name.addCDATA(bookName);
        // addText(String text):在当前对象下添加文本内容
        Name.addText(bookName);
    }

    public static void main(String[] args) {
        // DocumentHelper.createDocument():创建一个虚拟文档
        Document doc = DocumentHelper.createDocument();
        // addElement(String name):在当前对象下添加一个元素节点
        Element rootEle = doc.addElement("books");
        WriterXML wri = new WriterXML();
        // 在元素节点rootEle下添加书本的元素节点,即在books节点下保存书本具体信息
        wri.addBookInfo(rootEle, "bk001", "何海涛", "剑指Offer");
        wri.addBookInfo(rootEle, "bk002", "何昊", "Java程序员面试笔试宝典");
         // OutputFormat.createPrettyPrint():创建格式化,设置格式字符集为UTF-8
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        // 获取当前类的路径,用于存放xml文档的内容
        String path = WriterXML.class.getResource("").getPath();
        try {
            // 创建写xml对象,将内容保存到bookW.xml中
            XMLWriter writer = new XMLWriter(new FileOutputStream(new File(path, "bookW.xml")), format);
            writer.write(doc);
            writer.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

执行结果

bookW.xml

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值