xml

本贴最后更新于 2751 天前,其中的信息可能已经斗转星移

fee3fbfa294f42158df06452be7d6b50-image.png


1.xml
1.1xml 概念
可扩展的标签语言,标签自定义,作用:存储数据.(基本用于配置文件)
xml 常作为配置文件,里面存放了一些全限类名。通过解析 xml 和反射可以把这些类和类的方法加载。这便是学习本节内容的核心。当然初次之外还可以加载一些属性的值,用作参数传递。

1.2 书写规范
1.区分大小写
2.应该有一个根标签
3.标签必须关闭


4.属性必须用引号引起来,且是 key="value"形式

5.标签体中的空格或者换行或者制表符等内容都是作为数据内容存在的
aa
aa 这 2 种写法不一样
6.特殊字符必须转义
< > &
满足上面规范的文件我们称之为是一个格式良好的 xml 文件.可以通过浏览器浏览。后缀名: *.xml

1.3xml 组成部分:
1.3.1 声明
作用:告诉别人我是一个 xml 文件
格式:
例如: 版本目前暂时 1.0
要求: 必须在 xml 文件的第一行,必须顶格写

1.3.2 元素(标签)
格式:

要求:1.必须关闭
2.标签名不能 xml Xml XML 等等开头
3.标签名中不能出现" "或者":"等特殊字符.

1.3.3 属性
格式: <xx 属性名="属性值"/>
要求: 属性必须用引号引起来

1.3.4 注释:
和 html 一样

1.3.5 CDATA:
xml 文件的特殊字符必须转义,通过 cdataky 保证数据原样输出,无需再使用转义。
格式: 原样输出的内容

1.4xml 解析:
1.4.1 解析方式
1.sax:特点:逐行解析,只能查询.
2.dom:特点:一次性将文档加载到内容中,形成一个 dom 树.可以对 dom 树 curd 操作

1.4.2 解析技术
JAXP:sun 公司提供支持 DOM 和 SAX 开发包
JDom:dom4j 兄弟
jsoup:一种处理 HTML 特定解析开发包
★dom4j:比较常用的解析开发包,hibernate 底层采用。

1.4.3dom4j
解析原理:Xml 解析器一次性把整个 xml 文档加载进内存,然后在内存中构建一颗 Document 的对象树,通过 Document 对象,得到树上的节点对象,通过节点对象访问(操作)到 xml 文档的内容。
使用步骤:
1.导入 jar 包
2.创建一个核心对象 SAXReader
new SAXReader();
3.将 xml 文档加载到内存中形成一棵树
Document doc=reader.read(文件) 文件路径\转义\
4.获取根节点 导包 dom4j 的包
Element root=doc.getRootElement();
5.通过根节点就可以获取其他节点(文本节点,属性节点,元素节点)
获取所有的子元素
List list=root.elements()
获取元素的指定属性内容
String value=root.attributeValue("属性名");
获取子标签标签体:遍历 list 获取到每一个子元素
String text=ele.elementText("子标签名称")

1.4.4xpath 解析技术
指哪打哪的 dom4j 的扩展版,依赖于 dom4j。
使用步骤:
1.导入 jar 包(dom4j 和 jaxen-1.1-beta-6.jar)
2.加载 xml 文件到内存中
3.使用 api
selectNode("表达式");
selectSingleNode("表达式");
表达式的写法:
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
例如一个标签下有一个 id 属性且有值 id=2;
//元素名[@ 属性名='属性值']
//元素名[@id='2']

1.5 反射:
反射步骤:
1.获取对应的 class 对象
方式 1:★Class clazz=Class.forName("全限定名");
方式 2:Class clazz=类名.class;
方式 3:Class clazz==对象.getClass();
2.通过 class 对象创建一个实例对象(相当于 new 类())
Object clazz.newInstance();
3.通过 class 对象获取一个方法(public 修饰的)
Method method=clazz.getMethod("方法名",Class .... paramType); paramType 为参数的类型
4.让方法执行: method.invoke(Object 实例对象,Object ... 参数);
Object 实例对象:以前调用方法的对象,现在 clazz.newInstance()的对象。
Object ... 参数:该方法运行时需要的参数

1.6xml 约束:
作用:规定 xml 中可以出现那些元素及那些属性,以及他们出现的顺序.
约束的分类:
DTD 约束:struts hiebernate 等等
SCHEMA 约束:tomcat spring 等等

1.6.1DTD 约束:
1.6.1.1 和 xml 的关联 (一般都会提供好,复制过来即可,有时候连复制都不需要.)
方式 1:内部关联 格式:
方式 2:外部关联-系统关联 格式:
例如:
方式 3:外部关联-公共关联 格式:

1.6.1.2Dtd 语法
元素:<!Element 元素名称 数据类型 | 包含内容 >
数据类型:#PCDATA:普通文本 使用的时候一般用()引起来
包含内容:该元素下可以出现那些元素 用()引起来
符号:*出现任意次 ?出现 1 次或者 0 次 + 出现至少 1 次 | 或者 ()分组 , 顺序
属性:格式:
属性类型: ID:唯一 CDATA:普通文本
属性是否必须出现 REQUIRED:必须出现 IMPLIED:可以不出现
一个 xml 文档中只能添加一个 DTD 约束
xml 的学习目标:编写一个简单的 xml 文件可以根据约束文件写出相应 xml 文件.按 f2 或者 alt+/提示写出内容即可

1.6.2SCHEMA 约束
一个 xml 文档中可以添加多个 schema 约束
xml 和 schema 的关联
格式: < 根标签 xmlns="..." ...>
< 根标签 xmlns:别名="..." ...>
ns(nameSpace)名称空间:关联约束文件、规定元素是来源于那个约束文件的。
注意:schema 约束本身也是 xml 文件.

例如:
一个约束文件中规定 table(表格) 表格有属性 row 和 col
还有一个约束文件规定 table(桌子) 桌子有属性 width 和 height
在同一个 xml 中万一我把两个约束文件都导入了,在 xml 中我写一个 table,这个 table 有什么属性????
我们为了避免这种情况的发生,可以给其中的一个约束起个别名
使用的时候若是没有加别名那就代表是来自于没有别名的约束文件
例如 table(表格) 给他起个别名 xmlns:a="..."
在案例中使用 a:table 代表的是表格
若在案例中直接使用 table 代表的是桌子
在一个 xml 文件中只能有一个不起别名;
2bfe4e62e15b4a21a6909cc9e5b893c5-image.png

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3195 引用 • 8215 回帖

相关帖子

回帖
xml

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 4 关注
  • Telegram

    Telegram 是一个非盈利性、基于云端的即时消息服务。它提供了支持各大操作系统平台的开源的客户端,也提供了很多强大的 APIs 给开发者创建自己的客户端和机器人。

    5 引用 • 35 回帖
  • 音乐

    你听到信仰的声音了么?

    62 引用 • 512 回帖 • 1 关注
  • TensorFlow

    TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。

    20 引用 • 19 回帖
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 8 关注
  • BND

    BND(Baidu Netdisk Downloader)是一款图形界面的百度网盘不限速下载器,支持 Windows、Linux 和 Mac,详细介绍请看这里

    107 引用 • 1281 回帖 • 34 关注
  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    556 引用 • 675 回帖
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 1 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    31 引用 • 97 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    181 引用 • 400 回帖 • 2 关注
  • CodeMirror
    1 引用 • 2 回帖 • 157 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 346 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 415 关注
  • Sphinx

    Sphinx 是一个基于 SQL 的全文检索引擎,可以结合 MySQL、PostgreSQL 做全文搜索,它可以提供比数据库本身更专业的搜索功能,使得应用程序更容易实现专业化的全文检索。

    1 引用 • 216 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    41 引用 • 130 回帖 • 251 关注
  • Excel
    31 引用 • 28 回帖
  • 链滴

    链滴是一个记录生活的地方。

    记录生活,连接点滴

    171 引用 • 3843 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 14 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖 • 1 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    159 引用 • 305 回帖
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 644 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    186 引用 • 318 回帖 • 256 关注
  • 架构

    我们平时所说的“架构”主要是指软件架构,这是有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。另外还有“业务架构”、“网络架构”、“硬件架构”等细分领域。

    143 引用 • 442 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    92 引用 • 752 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 641 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    16 引用 • 236 回帖 • 268 关注
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖