xml

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

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 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3186 引用 • 8212 回帖 • 1 关注

相关帖子

回帖
xml

欢迎来到这里!

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

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

推荐标签 标签

  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 18 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 223 关注
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    939 引用 • 940 回帖
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 31 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 294 关注
  • SQLServer

    SQL Server 是由 [微软] 开发和推广的关系数据库管理系统(DBMS),它最初是由 微软、Sybase 和 Ashton-Tate 三家公司共同开发的,并于 1988 年推出了第一个 OS/2 版本。

    19 引用 • 31 回帖
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    209 引用 • 358 回帖
  • 小说

    小说是以刻画人物形象为中心,通过完整的故事情节和环境描写来反映社会生活的文学体裁。

    28 引用 • 108 回帖
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 586 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 53 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 733 关注
  • 服务器

    服务器,也称伺服器,是提供计算服务的设备。由于服务器需要响应服务请求,并进行处理,因此一般来说服务器应具备承担服务并且保障服务的能力。

    124 引用 • 580 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    90 引用 • 899 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 60 关注
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 632 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 2 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    54 引用 • 292 回帖
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22019 引用 • 87804 回帖 • 2 关注
  • JVM

    JVM(Java Virtual Machine)Java 虚拟机是一个微型操作系统,有自己的硬件构架体系,还有相应的指令系统。能够识别 Java 独特的 .class 文件(字节码),能够将这些文件中的信息读取出来,使得 Java 程序只需要生成 Java 虚拟机上的字节码后就能在不同操作系统平台上进行运行。

    180 引用 • 120 回帖 • 1 关注
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖 • 1 关注
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 621 关注
  • RabbitMQ

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

    49 引用 • 60 回帖 • 366 关注
  • OnlyOffice
    4 引用 • 2 关注
  • Netty

    Netty 是一个基于 NIO 的客户端-服务器编程框架,使用 Netty 可以让你快速、简单地开发出一个可维护、高性能的网络应用,例如实现了某种协议的客户、服务端应用。

    49 引用 • 33 回帖 • 19 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 911 回帖 • 237 关注