三、JavaWeb基础(xml文档详解)

一、概念:Extensible Markup Language 可扩展标记语言

1.可扩展

标签都是自定义的。 <user> <student>

2.功能:

  1. 存储数据
  2. 配置文件
  3. 在网络中传输

3.xml与html的区别

  1. xml标签都是自定义的,html标签是预定义。
  2. xml的语法严格,html语法松散
  3. xml是存储数据的,html是展示数据

4.语法

⑴ 基本语法:
  1. xml文档的后缀名 .xml
  2. xml第一行必须定义为文档声明
  3. xml文档中有且仅有一个根标签
  4. 属性值必须使用引号(单双都可)引起来
  5. 标签必须正确关闭
  6. 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 属性列表 ?>
  2. 属性列表
     * version:版本号,必须的属性
     * encoding:编码方式。告知解析引擎当前文档使用的字符集,默认值:ISO-8859-1
     * standalone:是否独立
      * 取值:
       * yes:不依赖其他文件
        *no:依赖其他文件
② 指令(了解):结合css的

<?xml-stylesheet type="text/css" href="a.css" ?>

③ 标签:标签名称自定义的

规则:

  • 名称可以包含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字母 xml(或者 XML、Xml 等等)开始
  • 名称不能包含空格
④ 属性:

id属性值唯一

⑤ 文本:

CDATA区:在该区域中的数据会被原样展示
格式<![CDATA[ 数据 ]]>

⑶ 约束:规定xml文档的书写规则

在这里插入图片描述

① 作为框架的使用者(程序员):
  1. 能够在xml中引入约束文档
  2. 能够简单的读懂约束文档
② 分类:
  1. DTD:一种简单的约束技术
    例如student.dtd

    <!ELEMENT students (student*) ><!--ELEMENT表示标签的意思,students是根标签,student是其子标,*表示可以有0个或者多个,+表示至少得有一个-->
    <!ELEMENT student (name,age,sex)><!--表示student的子标签有name,age,sex,它们需要按照这个指定顺序出现,且默认只能有一个-->
    <!ELEMENT name (#PCDATA)><!--#PCDATA表示字符串,表示name标签体里面的内容是字符串类型的-->
    <!ELEMENT age (#PCDATA)><!--#PCDATA表示字符串,表示age标签体里面的内容是字符串类型的-->
    <!ELEMENT sex (#PCDATA)><!--#PCDATA表示字符串,表示sex标签体里面的内容是字符串类型的-->
    <!ATTLIST student number ID #REQUIRED><!--属性约束,ATTLIST是属性的意思,表示student标签中有名字叫做number的属性,属性的类型是ID,ID表示名字叫做number的属性值唯一,#REQUIRED表示名字叫做number的属性必须出现-->
    
  2. Schema:一种复杂的约束技术

③ DTD:

引入dtd文档到xml文档中
 * 内部dtd将约束规则定义在xml文档中(很少用)
  <!DOCTYPE 根标签[约束内容]>
在这里插入图片描述
 * 外部dtd将约束的规则定义在外部的dtd文件中
   
本地<!DOCTYPE 根标签名 SYSTEM "dtd文件**的位置">
在这里插入图片描述
   
网络<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
      常用的方式

④ Schema:
  • 设计schema解决了dtd什么问题
    dtd文档约束了标签的格式,但是无法约束标签体中的内容。比如:<sex>内容</sex>中的内容只能是man或者woman,但是dtd文件无法达到这个效果。
    schame约束文档内容解析:
    在这里插入图片描述

  • 引入
    1.填写xml文档的根元素
    2.引入xsi前缀. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3.引入xsd文件命名空间. xsi:schemaLocation="http://www.kejizhentan.cn/xml student.xsd"
    4.为每一个xsd约束声明一个前缀,作为标识 xmlns="http://www.kejizhentan.cn/xml"

xml引入schema约束文档解析:
在这里插入图片描述

例如:mvc的配置文件
在这里插入图片描述

⑷ 解析:操作xml文档,将文档中的数据读取到内存中
① 操作xml文档
  1. 解析(读取):将文档中的数据读取到内存中
  2. 写入:将内存中的数据保存到xml文档中。持久化的存储
② 解析xml的方式:
  1. DOM将标记语言文档一次性加载进内存,在内存中形成一颗dom树
    • 优点:操作方便,可以对文档进行CRUD的所有操作
    • 缺点:占内存
  2. SAX逐行读取,基于事件驱动的。
    • 优点:不占内存。
    • 缺点:只能读取,不能增删改
③ xml常见的解析器:
  1. JAXP:sun公司提供的解析器,支持dom和sax两种思想
  2. DOM4J:一款非常优秀的解析器
  3. Jsoup:jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
  4. PULL:Android操作系统内置的解析器,sax方式的。
④ Dom4j解析
  1. 步骤
    a.引入jar文件(dom4j.jar)
    b.创建指向xml文档的输入流
    InputStream is = new FileInputStream("文件地址");
    c.创建一个xml读取工具对象
    SAXReader sr = new SAXReader();
    d.通过读取工具,读取xml文档的输入流i,并得到文档对象
    Document doc = sr.reader(is);
    e.通过文档对象,获取xml文档的根节点对象
    Element root = doc.getRootElement();

  2. Element对象的常用方法
    一个Element对象就表示一个xml文档的节点
    a.获取节点名称的方法
    String getName();
    b.获取节点内容的方法
    String gerText();
    c.根据节点名称获取匹配的第一个子节点对象
    Element element(”节点名称“)
    d.获取所有的子节点
    List<Element> elements();
    e.获取节点的属性值
    String attributeValue(”属性值名称“);

dom4j.jar点击下载

books.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<books>
	<book id="10001">
		<name>西游记</name>
		<info>讲述了唐老板带领三个徒弟辛苦创业的故事</info>
	</book>
	<book id="10002">
		<name>水浒传</name>
		<info>讲述了三个女人和105个男的故事</info>
	</book>
	<book id="10003">
		<name>三国</name>
		<info>讲述了三个老板辛苦创业的故事</info>
	</book>
	<book id="10004">
		<name>红楼梦</name>
		<info>讲述了富二代家里的故事</info>
	</book>
</books>

项目结构如下:
在这里插入图片描述
代码如下:

public class TestDom4j {
    public static void main(String[] args) {
        InputStream is = null;
        try {
            //1.创建指向xml文档的输入流
            is = TestDom4j.class.getClassLoader().getResourceAsStream("books.xml");
            //2.创建xml读取工具
            SAXReader sr = new SAXReader();
            //3.通过读取工具读取xml文档的输入流,得到文档对象
            Document doc = sr.read(is);
            //4.通过文档对象获取根节点
            Element root = doc.getRootElement();
            //5.Element的常用方法
            //5.1通过根节点获取所有的子节点(books的所有子节点是三个book节点)
            List<Element> es = root.elements();
            //5.2循环遍历集合
            for (Element book : es) {
                //5.3获取每个子节点book的id属性
                String idValue = book.attributeValue("id");
                //5.4获取book节点的name子节点
                Element name = book.element("name");
                //5.5获取name节点中的内容
                String nameValue = name.getText();
                //5.6获取book节点的子节点info
                Element info = book.element("info");
                //5.7获取info节点中内容
                String infoValue = info.getText();
                //5.8将获取到的内容打印输出
                System.out.println("图书id" + idValue+","+"图书名字:"+nameValue+","+"图书简介:"+infoValue);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

结果如下:
在这里插入图片描述

⑤ Jsoup解析

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

  1. 步骤
    a. 导入jar包点击下载jsoup.jar
    b. 获取Document对象
    c. 获取对应的标签Element对象
    d. 获取数据

    books.xml文件内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <books>
    	<book id="10001">
    		<name>西游记</name>
    		<info>讲述了唐老板带领三个徒弟辛苦创业的故事</info>
    	</book>
    	<book id="10002">
    		<name>水浒传</name>
    		<info>讲述了三个女人和105个男的故事</info>
    	</book>
    	<book id="10003">
    		<name>三国</name>
    		<info>讲述了三个老板辛苦创业的故事</info>
    	</book>
    	<book id="10004">
    		<name>红楼梦</name>
    		<info>讲述了富二代家里的故事</info>
    	</book>
    </books>
    

    项目结构如下:
    在这里插入图片描述
    代码如下:

    public class TestJsoup {
        public static void main(String[] args) throws IOException {
            //2.获取Document对象,根据xml文档获取
            //2.1获取student.xml的path
            String path = TestJsoup.class.getClassLoader().getResource("books.xml").getPath();
            //2.2解析xml文档,加载文档进内存,获取dom树--->Document
            Document document = Jsoup.parse(new File(path), "utf-8");
            //3.获取元素对象 Element
            Elements elements = document.getElementsByTag("name");
    
            System.out.println(elements.size());
            //3.1获取第一个name的Element对象
            Element element = elements.get(0);
            //3.2获取数据
            String name = element.text();
            System.out.println(name);
        }
    }
    
  2. 对象的使用
    Jsoup工具类,可以解析html或xml文档,返回Document
    a. parse:解析html或xml文档,返回Document

    • parse​(File in, String charsetName):解析xml或html文件的。
    • parse​(String html):解析xml或html字符串
    • parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
      例如:
    public class TestJsoup {
        public static void main(String[] args) throws IOException {
            //2.获取Document对象,根据xml文档获取
            //2.1获取student.xml的path
            String path = TestJsoup.class.getClassLoader().getResource("books.xml").getPath();
            //2.2解析xml文档,加载文档进内存,获取dom树--->Document
           /* Document document = Jsoup.parse(new File(path), "utf-8");
            System.out.println(document);*/
    
            //2.parse​(String html):解析xml或html字符串
            String str = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
                    "<books>\n" +
                    "\t<book id=\"10001\">\n" +
                    "\t\t<name>西游记</name>\n" +
                    "\t\t<info>讲述了唐老板带领三个徒弟辛苦创业的故事</info>\n" +
                    "\t</book>\n" +
                    "\t<book id=\"10002\">\n" +
                    "\t\t<name>水浒传</name>\n" +
                    "\t\t<info>讲述了三个女人和105个男的故事</info>\n" +
                    "\t</book>\n" +
                    "\t<book id=\"10003\">\n" +
                    "\t\t<name>三国</name>\n" +
                    "\t\t<info>讲述了三个老板辛苦创业的故事</info>\n" +
                    "\t</book>\n" +
                    "\t<book id=\"10004\">\n" +
                    "\t\t<name>红楼梦</name>\n" +
                    "\t\t<info>讲述了富二代家里的故事</info>\n" +
                    "\t</book>\n" +
                    "</books>";
            Document document = Jsoup.parse(str);
            System.out.println(document);
    
            //3.parse​(URL url, int timeoutMillis):通过网络路径获取指定的html或xml的文档对象
            /*URL url = new URL("http://www.kejizhentan.com");//代表网络中的一个资源路径
            Document document = Jsoup.parse(url, 10000);
            System.out.println(document);*/
        }
    }
    

    b.Document:文档对象。代表内存中的dom树
    文档对象获取Element对象的方法

    • getElementById​(String id):根据id属性值获取唯一的element对象
    • getElementsByTag​(String tagName):根据标签名称获取元素对象集合
    • getElementsByAttribute​(String key):根据属性名称获取元素对象集合
    • getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合

    c. Elements:元素Element对象的集合。可以当做 ArrayList<Element>来使用
    d. Element:元素对象中的方法

    1. 获取子元素对象

      • getElementById​(String id):根据id属性值获取唯一的element对象
      • getElementsByTag​(String tagName):根据标签名称获取元素对象集合
      • getElementsByAttribute​(String key):根据属性名称获取元素对象集合
      • getElementsByAttributeValue​(String key, String value):根据对应的属性名和属性值获取元素对象集合
    2. 获取属性值
      * String attr(String key):根据属性名称获取属性值

    3. 获取文本内容
      * String text():获取文本内容
      * String html():获取标签体的所有内容(包括字标签的字符串内容)

    e. Node:节点对象
    是Document和Element的父类

    f.快捷查询方式:基于jsoup
    1. selector:选择器
       * 使用的方法:Elements select​(String cssQuery)
       * 语法:参考Selector类中定义的语法
    2. XPath:XPath即为XML路径语言,它是一种用来确定XML(标准通用标记语言的子集)文档中某部分位置的语言
      * 使用Jsoup的Xpath需要额外导入jar包。点击下载相关jar
       * 查询w3cshool参考手册,使用xpath的语法完成查询
    在这里插入图片描述
    books.xml文件内容如下:

    	<?xml version="1.0" encoding="UTF-8"?>
    <books>
    	<book id="10001">
    		<name id = "1111">西游记</name>
    		<info>讲述了唐老板带领三个徒弟辛苦创业的故事</info>
    	</book>
    	<book id="10002">
    		<name id = "kejizhentan">水浒传</name>
    		<info>讲述了三个女人和105个男的故事</info>
    	</book>
    	<book id="10003">
    		<name>三国</name>
    		<info>讲述了三个老板辛苦创业的故事</info>
    	</book>
    	<book id="10004">
    		<name>红楼梦</name>
    		<info>讲述了富二代家里的故事</info>
    	</book>
    </books>
    

    项目结构:
    在这里插入图片描述
    代码如下:

    public class TestXpath {
        public static void main(String[] args) throws IOException, XpathSyntaxErrorException {
            //1.获取student.xml的path
            String path = TestXpath.class.getClassLoader().getResource("books.xml").getPath();
            //2.获取Document对象
            Document document = Jsoup.parse(new File(path), "utf-8");
    
            //3.根据document对象,创建JXDocument对象
            JXDocument jxDocument = new JXDocument(document);
    
            //4.结合xpath语法查询
            //4.1查询所有book标签
            List<JXNode> jxNodes = jxDocument.selN("//book");
            for (JXNode jxNode : jxNodes) {
                System.out.println(jxNode);
            }
    
            System.out.println("--------------------");
    
            //4.2查询所有book标签下的name标签
            List<JXNode> jxNodes2 = jxDocument.selN("//book/name");
            for (JXNode jxNode : jxNodes2) {
                System.out.println(jxNode);
            }
    
            System.out.println("--------------------");
    
            //4.3查询book标签下带有id属性的name标签
            List<JXNode> jxNodes3 = jxDocument.selN("//book/name[@id]");
            for (JXNode jxNode : jxNodes3) {
                System.out.println(jxNode);
            }
            System.out.println("--------------------");
            //4.4查询book标签下带有id属性的name标签 并且id属性值为kenjizhentan
    
            List<JXNode> jxNodes4 = jxDocument.selN("//book/name[@id='kejizhentan']");
            for (JXNode jxNode : jxNodes4) {
                System.out.println(jxNode);
            }
        }
    
    }
    

    结果如下:
    在这里插入图片描述

⑸ 通过java生成xml文档

需要导包dom4j.jar点击下载
步骤

① 通过文档帮助器(DocumentHelper)创建空的文档对象(Document)

Document doc = DocumentHelper.createDocument();

② 通过文档对象添加根节点,并得到新添加的根节点对象

Element root = doc.addElement("根节点名称");

③ 通过根节点丰富子节点

Element 子节点 = root.addElement("元素名称");

④ 创建一个文件输出流,用于将xml文档输出到文件中

OutputStream os = new FileOutputStream(“文件路径”);

⑤ 将文件输出流转换成xml文档输出流

XMLWriter xw = new XMLWriter(os);

⑥ 写出文档并释放资源

xw .write(doc );
xw .close;
os.close;

项目结构如下:
在这里插入图片描述
代码如下:

public class TestXml {
    public static void main(String[] args) {
        //1.通过文档帮助器创建文档对象,并将其暂存到内存中
        Document doc = DocumentHelper.createDocument();
        //2.通过文档对象添加根节点
        Element root = doc.addElement("books");
        //3.通过根节点丰富子节点
        for (int i = 0; i < 4; i++) {
            //3.1通过根节点添加子节点
            Element book = root.addElement("book");
            //3.2通过book节点添加name和info节点
            Element name = book.addElement("name");
            Element info = book.addElement("info");
            //3.3设置book的id属性
            book.addAttribute("id",String.valueOf(1001+i));
            switch(i){
                case 0:
                    //3.4设置name节点的内容
                    name.setText("西游记");
                    //3.5设置info节点的内容
                    info.setText("讲述了唐老板带领三个徒弟辛苦创业的故事");
                    break;
                case 1:
                    name.setText("水浒传");
                    info.setText("讲述了三个女人和105个男的故事");
                    break;
                case 2:
                    name.setText("三国演义");
                    info.setText("讲述了三个老板辛苦创业的故事");
                    break;
                default:
                    name.setText("红楼梦");
                    info.setText("讲述了富二代家里的故事");
                    break;
            }
        }
        OutputStream os = null;
        XMLWriter xw = null;
        try {
            //4.创建文件输出流
          os   = new FileOutputStream("books.xml");
          //5.将字节流转换成xml文档输出流
            xw = new XMLWriter(os);
            //6.将内存中的doc文档写入到磁盘中,并释放资源
            xw.write(doc);
        } catch (FileNotFoundException | UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if(xw != null){
                    xw.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                if(os != null){
                    os.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        System.out.println("xml文档生成完毕!!!!!");
    }
}

生成的xml内容如下:
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 1. 介绍 5 1.1 项目概述 5 1.2 范围 5 1.3 参考 5 2. 用例视图 6 2.1 WAS - SAP R/3 集成用例 6 2.1.1 车辆列表功能 6 2.1.2 车辆订购申请单的创建功能 7 2.1.3 车辆订购申请单查询功能 7 2.1.4 车辆订购申请单的修改功能 7 2.1.5 索赔单的创建 8 2.1.6 数据交换需求 8 2.2 PORTAL集成的用例 8 2.2.1 经销商 Portal 框架 9 2.2.2 车辆销售系统和Portal的整合 9 2.2.3 Nadcon system 和Portal系统的整合 10 2.2.4 车辆销售系统和Nadcon 的整合 10 3. 逻辑视图 10 3.1 兼容性 10 3.2 系统架构 10 3.2.1 逻辑架构 10 3.2.2 Web 应用的包设计 12 3.3 组件设计 - J2EE WEB APPLICATION 13 3.3.1 MVC 框架 – Struts 13 3.3.2 日志 14 3.3.3 BAPI代理结构 15 3.3.4 销售商用户信息组件和安全组件 16 3.3.5 页面表现框架 17 3.3.6 车辆列表功能 18 3.3.7 车辆订购请求单创建 24 3.3.8 车辆订购申请单查询列表 32 3.3.9 车辆订购申 请单修改 37 3.3.10 索赔单创建 43 3.3.11 数据交换 50 3.3.12 登录 & 退出 53 4. 数据视图 56 4.1 车辆列一表 57 4.2 车辆订购申请单创建 58 4.3 车辆订购申请单列表 59 4.4 车辆订购申请单修改 60 4.5 索赔单创建 61 5. 实现视图 62 5.1 缓存策略 62 5.2 会话管理 62 5.3 连接管理 62 5.4 集成的需要 62 5.4.1 WAS – SAP 集成 63 5.4.2 单点登陆 63 5.4.3 Vehicle Sale 系统 和 Nadcon的集成 63 6. 部署视图 64 6.1 安装需求 64 6.1.1 服务器的安装 64 6.2 服务支持的考虑 64 6.2.1 安全 64 6.2.2 服务器管理 64 7. 实现环境视图 64 7.1 开发环境 64 7.2 测试环境 64 7.3 生产环境 65 7.3.1 网络 65 7.4 域信息 65

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值