xml基础语法

1.xml基础语法

  • 概念:可扩展的标记语言,可扩展指的是xml的 标签可以自定义;
  • 作用:存储数据
1.作为配置文件使用,例如c3p0-config.xml配置文件;将来框架中还使用注解代替配置文件,但是往往注解和配置文件同时支持;(使用比较多)
2.作为网络传输的数据格式;(现在使用比较少),在开发中通常使用json数据格式(和js中的对象/数组格式一致)代替xml;

入门案例

<?xml version='1.0' ?>
<users>
    <user id='1'>
        <name>zhangsan</name>
        <age>23</age>
        <gender>male</gender>
        <br/>
    </user>

    <user id='2'>
        <name>lisi</name>
        <age>24</age>
        <gender>female</gender>
    </user>
</users>

语法:

1. xml文档的后缀名 .xml
2. xml第一行必须定义为文档声明
3. xml文档中有且仅有一个根标签
4. 属性值必须使用引号(单双都可)引起来
5. 标签必须正确关闭
6. xml标签名称区分大小写

xml的组成部分–文档声明

<?xml version="1.0" encoding="UTF-8" ?>
文档声明中:version和encoding属性必须使用

2.xml的约束

dtd约束

1.定义dtd约束(不需要我们定义,资料中有);
    <!ELEMENT students (student+) >
    <!ELEMENT student (name,age,sex)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT sex (#PCDATA)>
    <!ATTLIST student number ID #REQUIRED>
2.在xml中引入dtd约束;<!DOCTYPE xml跟标签 SYSTEM "dtd约束文件相对路径">
	<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE students SYSTEM "student.dtd">
    <students>
        <student number="s001">
            <name>zhangsan</name>
            <age>abc</age
            <sex>hehe</sex>
        </student>
        <student number="s002">
            <name>lisi</name>
            <age>24</age>
            <sex>female</sex>
        </student>
    </students>

schema约束:

1.编写schema约束;
2.在xml中引入schema约束
<?xml version="1.0" encoding="UTF-8" ?>
<!-- 
	1.填写xml文档的根元素
	2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.xxx.cn/xml  student.xsd"
	4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.xxx.cn/xml"

	说明:
		xsi:schemaLocation="名称空间 schema约束的相对路径" ;名称空间需要与schema约束文件中定义的targetNamespace="名称空间"一致
 -->
<students xmlns="http://www.xxx.cn/xml"
		  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		  xsi:schemaLocation="http://www.xxx.cn/xml student.xsd"
		>
	<student number="_0001">
		<name>xxx</name>
		<age>20</age>
		<sex>male</sex>
	</student>
</students>

3.jsoup解析xml文件

  • dom解析和sax解析的区别
1.dom解析一次性将文档加载进内存,形成一棵dom树;sax解析是基于事件将文档一行一行的加载进内容,读取到一行就触发一个事件;
2.dom解析占内存加大,sax解析完一行就释放一行资源,节省了内存消耗;
3.dom解析可以执行增删改查任意操作,sax只能读取文档中的数据;
  • jsoup解析的思路
1.将xml文件加载进内存解析,得到一个Document对象;
2.通过Document对象获取Element对象
3.操作Element对象内容体或者属性
例如:
public class JsoupDemo {
    public static void main(String[] args) throws IOException {
//        1.将xml文件加载进内存解析,得到一个Document对象;
//        1.1.通过类加载器获取src中文件路径
        String path = JsoupDemo.class.getClassLoader().getResource("b.xml").getPath();
//        1.2.调用Jsoup的静态parse方法解析
        Document document = Jsoup.parse(new File(path), "utf-8");
//        2.通过Document对象获取Element对象
        Elements elements = document.getElementsByTag("name");
//        3.操作Element对象内容体或者属性
        String name = elements.get(0).text();
        System.out.println("name = " + name);
    }
}
  • Document对象–通过css选择器获取元素对象
1.获取一个元素:
	Element element=document.selectFirst("css选择器");
	Element element = document.selectFirst("users user:nth-child(2)");//序号从1开始
2.获取多个元素:
	Elements elements=document.select("css选择器");
  • Element对象
1.操作标签名:
	获取标签名:String tagName = element.tagName();
    设置标签名:element.tagName("新标签名");
2.操作内容体:
	获取内容体:
	    String text = element.text();//获取纯文本的字符串,不带标签
        String html = element.html();//获取标签内容体html代码,可能带标签
	设置内容体:
		element.text("新内容字符串");
		element.html("新内容html代码,可以包含标签");
3.操作属性:
	获取属性值:String 属性值 = element.attr("属性名");
	设置属性:element.attr("属性名","属性值")4.获取子元素
	Elements children = element.children();//获取的是标签元素对象
5.获取父元素
	Element parent = element.parent();
6.对元素进行增删改
	增:父元素.append("<level>王者级</level>");//追加一个子元素
	删:element.remove(); //element表示要删除的元素
	改:设置标签名:element.tagName("新标签名");
7.将内存中的数据写到硬盘中
	private static void write2Disk(Document document, String path) throws IOException {
        System.out.println(path);
        //1.创建流对象,高效的字符流
        BufferedWriter bw=new BufferedWriter(new FileWriter(path));
        //2.写数据
        //2.1写文档声明
        bw.write("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
        bw.newLine();
        //2.2.获取body标签的内容体,也就是xml的正文
        Element body = document.selectFirst("body");
        bw.write(body.html());
        //3.释放资源
        bw.close();
    }

猜你喜欢

转载自blog.csdn.net/qq_38735045/article/details/85260215