文档章节

JavaWeb数据库开发知识总结(xml)

S
 Sunmos
发布于 2017/05/13 00:18
字数 1834
阅读 2
收藏 0
点赞 0
评论 0

JavaWeb数据库开发知识总结(XML)

1.XML概述

XML 指可扩展标记语言(EXtensible Markup Language);
XML 标签没有被预定义,需要自行定义标签.
XML的文档以.xml标示.

1.1 XML作用

  • 用于传输数据和存取数据.
  • 用作软件等程序的配置文件.

1.2 XML语法

XML基本语法要求:

# XML标签必须关闭,<标签></标签>或<标签/>;
# XML标签的字母区分大小写;
# XML标签的属性值必须要有引号(单引号或双引号);
# XML标签的嵌套必须是完整嵌套,不能交叉嵌套(父标签必须包含子标签的开始和关闭).

XML的文档声明:

<!-- XML的文档声明必须在文档的第一行和第一列(前面不能有空格和其他内容)的位置. -->
<!--文档声明格式:-->
<?xml 属性名1="属性值1" 属性名2="属性值2" 属性名3="属性值3"?>
    XML的文档声明属性值有如下3个:
        version(必须声明):xml的版本,一般是"1.0"版本;
        encoding(必须声明):xml的编码格式,就是文档使用的字符集;
        standalone(可选):描述xml文档是否需要依赖其他文件.

XML的注释格式:

<!-- XML的注释内容 -->

XML的元素(标签):

<!-- XML标签的命名规范 -->
<s1>名称可以含字母,数字以及其他的字符</s1>
<s2>名称不能以数字或者标点符号开始</s2>
<s3>名称不能以字符"xml"(或者XML,Xml)开始</s3>
<s4>名称不能包含空格</s4>
<s5>名称中不能含有冒号:</s5>
<s6>名称中不能包含特殊字符</s6>
<!-- XML标签的属性名的命名规范 -->
<s1>名称和XML标签命名要求相同</s1>
<s1>属性的值必须使用引号包含(单引号或双引号)</s1>

XML 的特殊字符:

XML转义 特殊字符 含义
&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; 省略号
&quot; 引号

XML的CDATA区:

<!--XML中使用CDATA标示某块区域不进行xml解析,就是其中的特殊不需要进行转义,默认按照本身的字符进行解析-->
<!-- CDATA格式 -->
<![CDATA[ 内容体;这里的内容不会被进行解析,可以出现特殊字符. ]]>

2. XML文件的解析

XML文件的解析:使用程序从XML文档中获取其中存储的数据.

2.1 XML文档的解析方式:

DOM解析:

DOM解析(Document Object Model):文档对象模型,将XML文档一次性加载进内存,创建DOM树形结构.

SAX解析:

SAX解析(Simple Api for XML):事件驱动式,逐行的解析XML文档.

两种解析方式的区别:

DOM解析:将XML文档一次性加载进内存中,创建DOM树结构,然后进行解析.
    缺点:当XML文档较大时容易导致内存溢出.
    优点:创建DOM树形接口后可以对XML文档进行增加,删除和修改元素的操作.
SAX解析:逐行的解析XML文档.
    缺点:不能对XML文档的元素进行增加,删除和修改的操作.
    优点:逐行的加载数据,不会导致内存溢出.

2.2 针对两种解析方式常见解析的API

针对XML解析实现的两种方式,有些实现XML解析的工具类,其中DOM4J应用较为广泛.
JAXP工具类:SUN公司提供的XML解析的API;
JDOM工具类:开源的解析XML的API-JDOM;
DOM4J工具类:开源的XML的API-DOM4J;
PULL工具类:主要解决Android端的XML文档的解析.

DOM4J工具类解析XML文档

XML文档的元素与DOM树形结构的对应关系:

XML文档中的元素 DOM树形结构(Document对象) DOM树形中的根节点
标签元素 Element对象 Node对象
标签属性 Attribute对象 Node对象
标签中的文本 Text对象 Node对象

使用DOM4J工具类解析XML文档的步骤:

DOM4J工具类:需要使用dom4j-版本号.jar
DOM4J解析XML文档的步骤:查找DOM树形中的节点只能逐级的进行查找,不能进行准确的进行定位查找
    1.导入DOM4J的jar包;
    2.创建解析器(一般有DOM和SAX解析器两种);
    3.由解析器获得当前XML的文档的Document对象;
    4.由Document对象获取XML文档的根节点;
    5.根据根节点查找其他的节点(元素对象).

使用XPath工具类辅助元素节点的快速查找:

XPath工具类:需要使用jaxen-1.1-beta-6.jar
XPath常用元素选择器(示例) 选择器含义
/AAA 选择根元素AAA
/AAA/CCC 选择AAA的所有CCC子元素
/AAA/DDD/BBB 选择AAA的子元素DDD的所有子元素
//BBB 选择所有BBB元素
//DDD/BBB 选择所有父元素是DDD的BBB元素
/AAA/CCC/DDD/* 选择所有路径依附于/AAA/CCC/DDD的元素
/*/*/*/BBB 选择所有的有3个祖先元素的BBB元素
//* 选择所有元素
/AAA/BBB[1] 选择AAA的第一个BBB子元素
/AAA/BBB[last()] 选择AAA的最后一个BBB子元素
//@id 选择所有的id属性
//BBB[@id] 选择有id属性的BBB元素
//BBB[@name] 选择有name属性的BBB元素
//BBB[@*] 选择有任意属性的BBB元素
//BBB[not(@*)] 选择没有属性的BBB元素
//BBB[@id=’b1’] 选择含有属性id且其值为’b1’的BBB元素
//BBB[@name=’bbb’] 选择含有属性name且其值为’bbb’的BBB元素
//BBB[normalize-space(@name)=’bbb’] 选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为’bbb’的BBB元素

案例代码:

/** * 使用xml的DOM4J包进行解析,使用XPath进行元素的选择 * DOM4J包:dom4j-1.6.1.jar * XPath包:jaxen-1.1-beta-6.jar */
public class My_XML_Demo {
    /** * 使用XPath进行遍历元素 * @throws DocumentException */
    @Test
    public void demo() throws DocumentException {
        // 创建xml解析器对象
        SAXReader saxr = new SAXReader();
        // 解析文件,获得document对象
        Document document = saxr.read("xml/student.xml");
        // 选择sid属性值为3的Student标签元素
        Element element = (Element) document.selectSingleNode("//student[@sid='3']");
        // 获取Student标签下的sname元素的文本
        String sname = element.element("sname").getText();
        // 获取Student标签下的age元素的文本
        String age  = element.element("age").getText();
        // 获取Student标签下的salary元素的文本
        String salary = element.element("salary").getText();
        // 获取Student标签下的grade元素的文本
        String grade = element.element("grade").getText();
        // 输出结果值
        System.out.println(sname+"---"+age+"---"+salary+"---"+grade);
    }
    /** * 使用传统方式进行遍历元素 * @throws DocumentException */
    @Test
    public void demo2() throws DocumentException {
        SAXReader saxr = new SAXReader();
        Document document = saxr.read("xml/student.xml");
        // 获取根节点
        Element root = document.getRootElement();
        // 获取根节点下所有的Student标签元素
        @SuppressWarnings("unchecked")
        List<Element> elements = root.elements("student");
        // 遍历Student标签元素的结合
        for (Element element : elements) {
            // 获取标签中sid的属性值
            String sid = element.attributeValue("sid");
            // 如果sid的属性值为3,则获取该Student标签下的所有的元素内容并输出
            if(sid.equals("3")) {
                // 获取Student标签下的sname元素的文本
                String sname = element.element("sname").getText();
                // 获取Student标签下的age元素的文本
                String age  = element.element("age").getText();
                // 获取Student标签下的salary元素的文本
                String salary = element.element("salary").getText();
                // 获取Student标签下的grade元素的文本
                String grade = element.element("grade").getText();
                // 输出结果值
                System.out.println(sname+"---"+age+"---"+salary+"---"+grade);
                // 找到对应的值就退出循环
                break;
            }
        }
    }
}

本文转载自:http://blog.csdn.net/l631106040120/article/details/71305377

共有 人打赏支持
S
粉丝 0
博文 34
码字总数 0
作品 0
成都
Java开发手册及JavaWeb工程师的成长及实践(及进阶)

> 进阶 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能- http://geek.csdn.net/news/detail/246999 成为一名合格软件工程师的7点建议- http://blog.csdn.net/dev_csdn/artic...

shareus
2016/03/03
0
0
Java Web学习计划

--- 本月为入门阶段,从零开始,一步一步的做出一个实用的网站。 深入学习Java语言,初步掌握前端技术,使用JSP和MySQL完成一个简单的网站 第1周 Java高级编程学习目标:
1.深入了解JDK环境...

SVD
2016/12/01
55
0
Java Web之理解 Hibernate And MyBatis

在JavaWeb开发中,最经典的就是SSH框架组合和SSM框架组合,现在很多IT公司愿意使用SSM,对于这里的H和M即Hibernate和MyBatis,今天简单来说道说道。 班门弄斧 上课时,我经常跟学生说,学习任...

YungFan
2017/06/28
0
0
最全java学习路线图 java学习指南

JavaEE学习路线图 准备篇 适用/适合人群:适合基础小白 目标:掌握JavaSE。 ●技术点小节: 1.开发工具的安装配置的介绍 2.JDK安装 3.DOS环境编程 4.Eclipse的安装使用 ●JAVA基础 1.基本的语...

耳东陈_f1e5
01/14
0
0
java技术路线

在技术方面无论我们怎么学习,总感觉需要提升自已,却又不知道从哪里着手,同时也不知道自己处于哪个水平。这时候就需要有清晰的指示图来指引我们,这样我们能清楚的知道我们在哪方面不足,以...

罗文浩
2015/11/26
193
1
java-学习路线

学习路线 java基础 java基础 java界面编程 java API java语法 AWT java IO 面向对象 事件机制 多线程 常见api Swing 网络编程 集合框架 反射注解 数据库开发 SQL基础 JDBC编程 JDBC高级 SQL基...

zhaoliang1131
2017/01/17
0
0
Java三大框架的技术起源

struts、hibernate和spring是我们java开发中的常用关键,他们分别针对不同的应用场景给出最合适的解决方案。但你是否知道,这些知名框架最初是怎样产生的? 我们知道,传统的javaweb应用程序...

aminqiao
2014/06/24
409
0
java进阶之路

Java程序员 高级特性 反射、泛型、注释符、自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入 核心编程 IO、多线程、实体类、集合类、正则表达式、XML和属性文件 ·图形编...

旋转木马-千里马
2016/01/19
279
0
JDiy-2.3正式版发布!超轻量级java极速开发框架

JDiy是一个超轻量级的java极速开发框架,同时也内置一套javaWeb建站开发平台。可以将JDiy应用于javaWeb/javaEE开发环境,或者javaSE开发环境。javaWeb开发,可以使用JDiy完全替代庞大的SSH....

子秋
2013/07/04
2.8K
12
Java学习历程

一:入门阶段 学习目标:Java程序员 1: 熟悉jdk,jvm,eclipse,安装于配置jdk 2:熟悉并掌握java的基础语法,类,抽象类,接口,内部类等概念 3: java核心编程,如输入输出流,多线程,集合...

余丰文zmixed
2016/07/21
109
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一款成功的全球服游戏该如何进行架构选型与设计?

全球服游戏如今正在成为出海游戏的主要考虑模式,跨国对战、全球通服打破国界的限制,将不同地区不同语言的玩家放在一起合作/竞技,成功吸引了大量玩家的关注,并逐渐成为主流的游戏玩法。 ...

UCloudTech
1分钟前
0
0
StringUtils类中isEmpty与isBlank的区别

org.apache.commons.lang.StringUtils类提供了String的常用操作,最为常用的判空有如下两种isEmpty(String str)和isBlank(String str)。 StringUtils.isEmpty(String str) 判断某字符串是否为...

说回答
14分钟前
0
0
react native使用redux快速上手

先看个简单demo //app.jsimport React, {Component} from 'react';import {StyleSheet, Button, View} from 'react-native';import TestView from './src/testView'export default......

燕归南
15分钟前
0
0
页面输出JSON格式数据

package com.sysware.utils;import java.io.IOException;import javax.servlet.ServletResponse;import org.apache.log4j.Logger;import com.sysware.SyswareConstant;pub......

AK灬
36分钟前
0
0
springCloud-2.搭建Eureka Client的使用

1.使用IDEA,Spring Initializr创建 2.填写项目资料 3.选择spring boot版本,插件选择Cloud Discovery→Eureka Discovery 4.选择保存地址 5.修改application.yml eureka: client: s...

贺小康
40分钟前
0
0
CenOS 6.5 RPM 安装 elasticsearch 6.3.1

下载 wget --no-check-certificate https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm...

阿白
42分钟前
0
0
1.4 创建虚拟机&1.5 安装CentOS7&1.6 配置ip(上)&1.7 配置ip(下)

1.4 创建虚拟机 知识点 虚拟机网络链接模式 桥连 直接将虚拟网卡桥接到一个物理网卡上面。需要手工为虚拟系统配置IP地址、子网掩码,而且还要和宿主机器处于同一网段,这样虚拟系统才能和宿主...

小丑鱼00
48分钟前
0
0
TrustAsia(亚洲诚信)助力看雪2018安全开发者峰会

2018年7月21日,看雪2018安全开发者峰会在北京国家会议中心圆满落下帷幕。拥有18年悠久历史的老牌安全技术社区——看雪学院联手国内最大开发者社区CSDN,汇聚业内顶尖的安全开发者和技术专家...

亚洲诚信
50分钟前
0
0
Spring注解介绍

@Resource、@AutoWired、@Qualifier 都用来注入对象。其中@Resource可以以 name 或 type 方式注入,@AutoWired只能以 type 方式注入,@Qualifier 只能以 name 方式注入。 但它们有一些细微区...

lqlm
今天
0
0
32位汇编在64位Ubuntu上的汇编和连接

本教程使用的操作系统是Ubuntu Linux 18.04 LTS版本,汇编器是GNU AS(简称as),连接器是GNU LD(简称ld)。 以下是一段用于检测CPU品牌的汇编小程序(cpuid2.s): .section .dataoutput...

ryanliue
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部