xml

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

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

    3168 引用 • 8207 回帖

相关帖子

回帖
xml

欢迎来到这里!

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

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

推荐标签 标签

  • 招聘

    哪里都缺人,哪里都不缺人。

    189 引用 • 1056 回帖
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    129 引用 • 793 回帖
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    161 引用 • 473 回帖 • 1 关注
  • Typecho

    Typecho 是一款博客程序,它在 GPLv2 许可证下发行,基于 PHP 构建,可以运行在各种平台上,支持多种数据库(MySQL、PostgreSQL、SQLite)。

    12 引用 • 60 回帖 • 465 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    51 引用 • 37 回帖
  • CodeMirror
    1 引用 • 2 回帖 • 120 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 20 关注
  • gRpc
    10 引用 • 8 回帖 • 55 关注
  • frp

    frp 是一个可用于内网穿透的高性能的反向代理应用,支持 TCP、UDP、 HTTP 和 HTTPS 协议。

    15 引用 • 7 回帖 • 10 关注
  • Tomcat

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

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

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

    5 引用 • 35 回帖 • 1 关注
  • 30Seconds

    📙 前端知识精选集,包含 HTML、CSS、JavaScript、React、Node、安全等方面,每天仅需 30 秒。

    • 精选常见面试题,帮助您准备下一次面试
    • 精选常见交互,帮助您拥有简洁酷炫的站点
    • 精选有用的 React 片段,帮助你获取最佳实践
    • 精选常见代码集,帮助您提高打码效率
    • 整理前端界的最新资讯,邀您一同探索新世界
    488 引用 • 383 回帖 • 5 关注
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    21 引用 • 140 回帖 • 28 关注
  • Kafka

    Kafka 是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是现代系统中许多功能的基础。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。

    35 引用 • 35 回帖
  • OpenStack

    OpenStack 是一个云操作系统,通过数据中心可控制大型的计算、存储、网络等资源池。所有的管理通过前端界面管理员就可以完成,同样也可以通过 Web 接口让最终用户部署资源。

    10 引用 • 7 关注
  • Mobi.css

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

    1 引用 • 6 回帖 • 697 关注
  • SQLServer

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

    19 引用 • 31 回帖 • 6 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 643 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 407 回帖 • 528 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    108 引用 • 54 回帖
  • 博客

    记录并分享人生的经历。

    270 引用 • 2386 回帖
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖 • 1 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 513 关注
  • golang

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

    492 引用 • 1383 回帖 • 374 关注
  • Maven

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

    185 引用 • 318 回帖 • 344 关注