XML

XML简介

  XML指可扩展标记语言(EXtensible Markup Language),是一种标记语言。

  XML是一种灵活的语言,标签没有被预定义,需要自行定义标签。

  通常,XML被用于信息的记录和传递,而非显示数据。XML被设计为具有自我描述性。

  XML经常被用于充当配置文件。

XML语法

  声明信息,它定义XML的版本(1.0)和所使用的编码(一般为UTF-8)

<?xml version="1.0" encoding="UTF-8"?>

  xml有且仅有一个根元素

  xml是大小写敏感的

  标签是成对的,必须正确嵌套

  xml的属性值必须加引号

  注释的写法

<!-- 这里是注释 -->

XML 文档形成了一种树结构,它从“根部”开始,然后扩展到“枝叶”。

  形式良好的xml实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里是注释 -->
<books>
<book id="01">
<name>java从入门到精通</name>
<author>Tom</author>
<price>45.6</price>
</book>
<book id="02">
<name>mysql学习指南</name>
<author>lili</author>
<price>49.6</price>
</book>
</books>

拥有正确语法的 XML 被称为“形式良好”的 XML。

通过 DTD 验证的 XML 是“合法”的 XML。

DTD

DTD简介

  DTD(Document Type Definition文档类型定义)

  DTD用与约束xml的文档格式。可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。

  DTD可被成行地声明于XML文档中(内部DTD),也可作为一个外部引用(外部DTD)。

使用DTD

内部DTD的定义

<!DOCTYPE 根元素 [元素声明]>

  元素声明语法

<!ELEMENT 元素名 (子元素[, 子元素 ...])>

  数量词

  • +  :表示出现 1 次或多次,至少一次。
  • ?:表示出现 0 次或 1 次
  • *  :表示出现任意次

  属性声明语法

  • 属性类型:CDATA,表示字符数据(character data)
  • 默认值:
    • #REQUIRED  表示必须出现
    • #IMPLIED  表示不是必须的
<!ATTLIST 元素名称 属性名称 属性类型 默认值>

  

  合法的xml实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 声明内部DTD -->
<!DOCTYPE books [
<!ELEMENT books (book*) >
<!ELEMENT book (name,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
]>
<books>
<book id="01">
<name>java从入门到精通</name>
<author>Tom</author>
<price>45.6</price>
</book>
<book id="02">
<name>mysql学习指南</name>
<author>lili</author>
<price>49.6</price>
</book>
</books>

外部DTD定义

  创建一个独立的DTD文件

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT books (book*) >
<!ELEMENT book (name,author,price)>
<!ATTLIST book id CDATA #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>

  在xml中引入外部DTD文件

<!DOCTYPE 根元素 SYSTEM "文件名">

  实例

<?xml version="1.0" encoding="UTF-8"?>
<!-- 引入外部DTD文件 -->
<!DOCTYPE book SYSTEM "book.dtd">
<books>
<book id="01">
<name>java从入门到精通</name>
<author>Tom</author>
<price>45.6</price>
</book>
<book id="02">
<name>mysql学习指南</name>
<author>lili</author>
<price>49.6</price>
</book>
</books>

XSD(XML Schema Definition)

  XML Schema 是DTD 的替代者

  XSD 不仅可以定义XML文档的结构,还可以规范文档的内容

  XSD 本身也是XML文档

  XSD 采用XML文档来定义语义约束,比DTD要复杂一些,但是功能强大。

  • 支持丰富的数据结构
  • 允许开发者自定义数据类型
  • 可读性强
  • 可针对未来需求进行扩展

XML的解析

  对xml文件进行操作,包括创建 xml,对 xml 文件进行增删改查操作

常见的xml解析技术

DOM解析

  XML DOM(XML Document Object Model),即XML文档对象模型。

  是官方提供的解析方式,基于xml树解析。

  XML文档对象模型定义访问和操作XML文档的标准方法。

SAX解析

  是民间的解析方式,基于事件的解析。

  消耗资源小,适用于数据量较大的XML。

JDOM解析

  第三方提供,开源免费。

  比DOM更快,使用具体类而不使用接口。

DOM4J

  第三方提供,开源免费。

  是JDOM的升级版。

DOM4J解析XML

  借助DOM4J解析读取XML文件内容。

    /**
* 借助DOM4J解析读取XML文件内容
*
* @author shangyang
* @throws Exception
*/
public static void readerXML() throws Exception { // 创建SAXReader对象,用于读取xml
SAXReader reader = new SAXReader();
// 读取xml文件,得到Document对象
Document doc = reader.read(new File("src/book.xml"));
// 获取根元素
Element root = doc.getRootElement();
// 获取根元素下所有子元素
Iterator<Element> it = root.elementIterator();
while (it.hasNext()) {
// 取出元素
Element e = it.next();
// 获取id属性
Attribute id = e.attribute("id");
System.out.println(e.getName() + id.getValue());
// 获取子元素
Element name = e.element("name");
Element author = e.element("author");
Element price = e.element("price"); System.out.println(name.getName() + " = " + name.getStringValue());
System.out.println(author.getName() + " = " + author.getStringValue());
System.out.println(price.getName() + " = " + price.getText());
System.out.println("--------------");
}
}

  通过DOM4J解析生成xml文件

    /**
* 通过DOM4J解析生成xml文件
* @author shangyang
* @throws Exception
*/
public static void writerXML() throws Exception {
// 1、通过DocumentHelper生成一个Document对象
Document doc = DocumentHelper.createDocument();
// 2、添加并得到根元素
Element root = doc.addElement("sources");
// 3、为根元素添加子元素
Element student = root.addElement("student");
// 4、为student元素添加属性
student.addAttribute("id", "1614010101");
// 5、为student添加子元素
Element name = student.addElement("name");
Element course = student.addElement("course");
Element results = student.addElement("results");
// 6、为子元素添加文本
name.addText("张三");
course.addText("数据结构");
results.addText("67");
// 7、将doc输出到xml文件中
OutputFormat format = OutputFormat.createPrettyPrint();
XMLWriter writer = new XMLWriter(new FileWriter(new File("src/sources.xml")), format);
writer.write(doc);
writer.close();
}

学习笔记—XML的更多相关文章

  1. html学习笔记-XML

    html学习笔记-XML Table of Contents 1. XML简介 2. XML用途 3. XML树结构 4. XML语法 5. XML元素 6. XML属性 7. XML验证 8. XM ...

  2. .net学习笔记---xml基础知识

    一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基 ...

  3. .net学习笔记---xml序列化

    XML序列化是将对象的公共属性和字段转换为XML格式,以便存储或传输的过程.反序列化则是从XML输出中重新创建原始状态的对象.XML序列化中最主要的类是XmlSerializer类.它的最重要的方法是 ...

  4. Java学习笔记XML(3)

    XML简介 XML即可扩展的标记语言.因此该语言中所有的标签都是没有预先定义的,开发者可以自己随意的指定. 目前为止所有的标记的语言都属于开源的语言.由W3C组织进行一个基本的维护. 因此大家学习这些 ...

  5. JavaWeb学习笔记——XML解析

    DOM解析操作 只在跟节点<addresslist>下面建立一个子节点<name> <?xml version="1.0" encoding=&quo ...

  6. Android学习笔记——xml

    转自http://blog.csdn.net/sam_zhang1984 解析 XML 有两种方式: SAX 和 DOM .它们各有利弊. DOM 是把 XML 文档全部装载到内存中,然后当成一树进行 ...

  7. .net学习笔记---xml操作及读写

    一.XML文件操作中与.Net中对应的类 微软的.NET框架在System.xml命名空间提供了一系列的类用于Dom的实现. 以下给出XML文档的组成部分对应.NET中的类: XML文档组成部分 对应 ...

  8. Python学习笔记--XML的应用

    XML的定义 XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 HTML XML 的设计宗旨是传输数据,而非显示数据 XML 标签没有被 ...

  9. Java学习笔记--xml构造与解析之Sax的使用

    汇总:xml的构造与解析 http://www.cnblogs.com/gnivor/p/4624058.html 参考资料:http://www.iteye.com/topic/763895 利用S ...

随机推荐

  1. happyChat开发系列:使用websocket.io实现双向通信的乐聊大前端开发

    一.前言 乐聊是一个自己用websocket写一个完整的应用,虽然功能比较欠缺,但是实现了基本的文字聊天,以及群聊,私聊,机器人聊天等功能.因为这个自己做了PC端,无线端(手机端),以及使用cordo ...

  2. javascript引擎执行的过程的理解--执行阶段

    一.概述 同步更新sau交流学习社区(nodeJSBlog):javascript引擎执行的过程的理解--执行阶段 js引擎执行过程主要分为三个阶段,分别是语法分析,预编译和执行阶段,上篇文章我们介绍 ...

  3. Linux三剑客-grep || awk || sed

    grep是一个强大的文本搜索工具 命令格式: grep [option] pattren file -a  将二进制文档以文本方式处理 -c  计算找到的符合行的次数 -i  忽略大小写 -n  顺便 ...

  4. WAF开放规则定义权:专家策略+用户自定义策略=Web安全

    在第一期“漫说安全”栏目中,我们用四格漫画的形式介绍了基于深度学习的阿里云WAF到底智能在哪里,能帮客户解决什么问题. 在今天的这期栏目里,我们依然通过漫画这种通俗易懂的方式,与大家分享阿里云WAF的 ...

  5. Mybatis插入数据返回主键ID

    <insert id="add" parameterType="com.dsa.core.base.model.ProductSync">      ...

  6. 在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来

    在做关于NIO TCP编程小案例时遇到无法监听write的问题,没想到只是我的if语句的位置放错了位置,哎,看了半天没看出来 贴下课堂笔记: 在Java中使用NIO进行网络TCP套接字编程主要以下几个 ...

  7. ArcGIS JS API多线程克里金插值

        最近做关于雨量插值的项目,本来使用后台的GP工具做的,但是处理时间比较长需要十几秒钟左右,所以研究怎么通过前台来计算.     参考下克里金例子,思路是生成要计算区域的100乘以100网格,然 ...

  8. 第八周LINUX学习笔记

    vsftpd丶NFS丶SAMBA nfs基于rpcsamba基于cifs(smb)  DRBD: ftp:File Transfer protocol 文件传输协议 两个连接:       tcp:命 ...

  9. JournalNode failed to restart

    Install clusterEnable Namenode HAStart RU"Zookeeper" is completed"Core Masters" ...

  10. 阿里云SLB出现502 Bad Gateway 错误排查解决方法

    502 Bad Gateway The proxy server received an invalid response from an upstream server. 原本系统是通过一个SLB转 ...