黑马全套Java教程(十)(二)

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 黑马全套Java教程(十)

黑马全套Java教程(十)(一)+https://developer.aliyun.com/article/1556519

40 XML

40.1 XML

XML是可扩展标记语言的缩写,它是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据

  • 纯文本,默认使用UTF-8编码;二是可嵌套
  • 如果把XML内容存为文件,那么它就是一个XML文件
  • XML的使用场景:XML内容经常被当成消息进行网络传输,或者作为配置文件用于存储系统的消息

    语法规则:


hello_world.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!-- 我是注释: 跟标签只能有一个-->
<student>
    <name>女儿国网</name>
    <sex>女</sex>
    <hobby>唐僧</hobby>
    <info>
        <age>30</age>
        <addr>女儿国</addr>
    </info>
    <sql>
        select * from user where age &lt; 18;
        select * from user where age &lt; 18 &amp;&amp; age > 10;
        <![CDATA[
                select * from user where age < 18;
        ]]>
    </sql>
</student>


文档约束:是用来限定xml文件中的标签以及属性应该怎么写;以此强制约束程序员必须按照文档约束的规定来编写xml文件。


DTD约束文档

例:

DTD的问题:

  1. 可以约束XML文件的编写
  2. 不能约束具体的数据类型

schema约束



例:



40.2 XML解析技术

什么是XML解析:使用程序读取XML中的数据

两种解析方式:

  1. SAX解析
  2. DOM解析

案例:dom4j解析

package d1_dom4j;
/*
 *  目标:学会使用dom4j解析XML文件中的数据
 *  1、导入dom4j框架
 *  2、准备一个XML文件
 */
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.io.File;
import java.io.InputStream;
public class Dom4JHelloWorldDemo1 {
    @Test
    public void parseXMLData() throws DocumentException {
        //1、创建一个Dom4j的解析对象,代表了整个dom4j框架
        SAXReader saxReader = new SAXReader();
        //2、把XML文件加载到内存中成为一个Document文档对象
        //Document document = saxReader.read(new File("xml-app\\src\\Contacts.xml"));   //需要通过模块名定位
        //直接在src下寻找文件,改了模块名没有影响
        InputStream is = Dom4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
        Document document = saxReader.read(is);
        //3、获取根元素对象
        Element root = document.getRootElement();
        System.out.println(root.getName());
    }
}


package d1_dom4j;
/*
 *  目标:学会使用dom4j解析XML文件中的数据
 *  1、导入dom4j框架
 *  2、准备一个XML文件
 */
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import org.w3c.dom.Attr;
import java.io.File;
import java.io.InputStream;
import java.util.List;
public class Dom4JHelloWorldDemo1 {
    @Test
    public void parseXMLData() throws DocumentException {
        //1、创建一个Dom4j的解析对象,代表了整个dom4j框架
        SAXReader saxReader = new SAXReader();
        //2、把XML文件加载到内存中成为一个Document文档对象
        //Document document = saxReader.read(new File("xml-app\\src\\Contacts.xml"));   //需要通过模块名定位
        //直接在src下寻找文件,改了模块名没有影响
        InputStream is = Dom4JHelloWorldDemo1.class.getResourceAsStream("/Contacts.xml");
        Document document = saxReader.read(is);
        //3、获取根元素对象
        Element root = document.getRootElement();
        System.out.println(root.getName());
        //4、拿根元素下的全部子元素对象
        List<Element> sonEles = root.elements();
        for (Element sonEle : sonEles) {
            System.out.println(sonEle.getName());
        }
        //拿到某个子元素
        Element userEle = root.element("user");
        System.out.println(userEle.getName());
        //默认提取第一个子元素对象
        Element contact = root.element("contact");
        //获取子元素文本
        System.out.println(contact.elementText("name"));
        //去掉前后空格
        System.out.println(contact.elementTextTrim("name"));
        //根据元素获取属性值
        Attribute idAttr = contact.attribute("id");
        System.out.println(idAttr.getName() + "----->" + idAttr.getValue());
        //直接提取属性值
        System.out.println(contact.attributeValue("id"));
        System.out.println(contact.attributeValue("vip"));
        //获取当前元素下的子元素对象
        Element email = contact.element("email");
        System.out.println(email.getText());
    }
}


案例:

package d1_dom4j;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
//需求:解析XML中的数据成为一个List集合对象
public class Dom4JTest2 {
    @Test
    public void parseToList() throws DocumentException {
        //需求:解析XML中的数据称为一个List集合对象
        //1、导入框架
        //2、创建SaxReader对象
        SAXReader saxReader = new SAXReader();
        //3、加载XML文件成为文档对象Document对象
        Document document = saxReader.read(Dom4JTest2.class.getResourceAsStream("/Contacts.xml"));
        //4、先拿根元素
        Element root = document.getRootElement();
        //5、提取contact子元素
        List<Element> contactEles = root.elements("contact");
        //6、准备一个ArrayList集合封装联系人信息
        List<Contact> contacts = new ArrayList<>();
        //7、遍历Contact子元素
        for (Element contactEle : contactEles) {
            //8、每个子元素都是一个联系人对象
            Contact contact = new Contact();
            contact.setId(Integer.valueOf(contactEle.attributeValue("id")));
            contact.setVip(Boolean.valueOf(contactEle.attributeValue("vip")));
            contact.setName(contactEle.attributeValue("Name"));
            contact.setGender(contactEle.attributeValue("gender").charAt(0));   //取一个字符
            contact.setEmail(contactEle.attributeValue("email"));
            //9、把联系人对象数据加入到List集合
            contacts.add(contact);
        }
        //10、遍历List集合
        for (Contact contact : contacts) {
            System.out.println(contact);
        }
    }
}


40.3 XPath

XPath使用路径表达式来定位XML文档中的元素节点或属性节点

总结

目录
相关文章
|
2天前
|
存储 Java 编译器
Java基础教程(五千字带你快速入门!)(二)
Java基础教程(五千字带你快速入门!)(二)
|
13小时前
|
XML 测试技术 数据格式
《手把手教你》系列基础篇(八十五)-java+ selenium自动化测试-框架设计基础-TestNG自定义日志-下篇(详解教程)
【7月更文挑战第3天】TestNG教程展示了如何自定义日志记录。首先创建一个名为`TestLog`的测试类,包含3个测试方法,其中一个故意失败以展示日志。使用`Assert.assertTrue`和`Reporter.log`来记录信息。接着创建`CustomReporter`类,继承`TestListenerAdapter`,覆盖`onTestFailure`, `onTestSkipped`, 和 `onTestSuccess`,在这些方法中自定义日志输出。
17 6
|
1天前
|
Java 测试技术 Android开发
《手把手教你》系列基础篇(八十四)-java+ selenium自动化测试-框架设计基础-TestNG日志-上篇(详解教程
【7月更文挑战第2天】TestNG是一个用于自动化测试的Java框架,提供日志记录功能。日志有两种模式:底层级详细记录每个步骤,高层级仅记录关键事件。示例代码展示了如何在测试方法中使用`Reporter.log()`记录信息,这些信息会显示在TestNG HTML报告中。文章还提及了日志显示时可能出现的编码问题及解决办法。
|
2天前
|
IDE Java 测试技术
黑马全套Java教程(十)(一)
黑马全套Java教程(十)
10 0
|
2天前
|
存储 Java
黑马全套Java教程(九):网络编程(四)
黑马全套Java教程(九):网络编程
9 0
|
2天前
|
网络协议 Java
黑马全套Java教程(九):网络编程(三)
黑马全套Java教程(九):网络编程
8 0
|
2天前
|
Java
黑马全套Java教程(九):网络编程(二)
黑马全套Java教程(九):网络编程(二)
9 0
|
2天前
|
安全 Java
黑马全套Java教程(九):网络编程(一)
黑马全套Java教程(九):网络编程(一)
11 0
|
2天前
|
XML 测试技术 数据格式
《手把手教你》系列基础篇(八十三)-java+ selenium自动化测试-框架设计基础-TestNG测试报告-下篇(详解教程)
【7月更文挑战第1天】使用TestNG自定义报告的简要说明: - TestNG提供默认的HTML和XML报告,但可通过实现IReporter接口创建自定义报告。 - 自定义报告器类需扩展`CustomReporter.java`,实现`generateReport()`方法,接收XML套房、测试结果及输出目录作为参数。
13 0
|
安全 Java 程序员
4月7日云栖精选夜读:给 Java 学习者的超全教程整理
作为Java程序员的我们,应该不仅对这门语言有所了解,而且我们在平常编程时也需要使用众多的库。比如小编知道的,如果要学习Java Web的话,SSH(Spring, Struts和Hibernate)肯定得会吧,或者至少了解基本的原理吧。
2743 0