1.XML

1.1xml简介

a)xml,eXtensible Markup Language,可扩展标记语言,是一种标记语言;

b)xml是一种非常灵活的语言,没有固定的标签,所有的额标签都可以自定义。

c)通常,xml被用于信息的记录和传递,因此,xml经常被用于充当配置文件。

1.2格式良好的xml

a)声明信息,用于描述xml的版本的编码格式

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

b)xml有且仅有一个根元素

c)xml是大小写敏感的

d)标签是成对的,而且要正确嵌套

e)属性值要使用双引号;例如:

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里是注释 -->
<books>
    <book id="b01">
        <name>java高级编程</name>
        <author>张三</author>
        <price>50.5</price>
    </book>
    <book id="b02">
         <name>java中级编程</name>
         <author>李四</author>
         <price>30.5</price>
    </book>
</books>

2.DTD

2.1DTD简介

a)DTD,Document Type Definition,文档类型定义

b)DTD用于约束xml的文档格式,保证xml是一个有效的xml;

c)DTD可以分为两种,内部DTD,外部DTD

2.2使用DTD

2.2.1内部DTD的定义

a)语法如下:

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

b)元素声明语法:

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

c)数量词

>+:表示出现一次或多次,至少一次

>?:表示出现0次或1次;

>*:表示出现任意次

d)属性声明语法:

>属性类型:CDATA,表示字符数据(character data)

>默认值:

- #REQUIRED,表示必须出现

-#IMPLIED,表示不是必须的

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

e)带DTD的完整xml代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE scores [
     <!ELEMENT scores (student+)>
     <!ELEMENT student (name, course,score)>
     <!ATTLIST student id CDATA #REQUIRED>
     <!ELEMENT name (#PCDATA)>
     <!ELEMENT course (#PCDATA)>
     <!ELEMENT score (#PCDATA)>
]>
<scores>
    <student id="1">
         <name>王同</name>
         <course>java</course>
         <score>89</score>
    </student>
        <student id="2">
         <name>李佳</name>
         <course>sql</course>
         <score>58</score>
    </student>
</scores>

2.2.2外部DTD的定义

a)创建一个独立的dtd文件

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

<!ELEMENT scores (student+)>

<!ELEMENT student (name, course, score)>

<!ATTLIST student id CDATA #REQUIRED>

<!ELEMENT name (#PCDATA)>

<!ELEMENT course (#PCDATA)>

<!ELEMENT score (#PCDATA)>

b)在xml中引入外部DTD文件

<!--引入外部DTD文件>

<!DOCTYPE scores SYSTEM "scores.dtd">

3.XML的解析技术

3.1.1 DOM解析

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

3.1.2 SAX解析

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

3.1.3 JDOM解析

第三方提供, 开源免费的解析方式, 比DOM解析快

3.1.4 DOM4J

第三方提供, 开源免费, 是JDOM的升级版

3.2 DOM4J解析XML

需要导入dom4j的jar包, 解析xml的入口, 是需要先拿到一个Document对象

3.2.1 读取xml文件中的信息

需要导入dom4j的jar包, 解析xml的入口, 是需要先拿到一个Document对象

public static void main(String[] args) throws DocumentException {
        //1.创建SAXReader对象,用于读取xml文件
        SAXReader reader = new SAXReader();
        //2.读取xml文件,得到Document对象
        Document doc = reader.read(new File("src/scores2.xml"));
        //3.获取根元素
        Element root = doc.getRootElement();
        //4.获取根元素下所有子元素
        Iterator<Element> iter = root.elementIterator();
        while(iter.hasNext()) {
            //取出元素
            Element e = iter.next();
            System.out.println(e.getName());
            //获取id属性
            Attribute id = e.attribute("id");
            System.out.println(id.getName()+"="+id.getValue());
            //获取student的子元素
            Element name = e.element("name");
            Element course = e.element("course");
            Element score = e.element("score");
            //打印
            System.out.println(name.getName()+"="+name.getStringValue());
            System.out.println(course.getName() + "=" + course.getText());
            System.out.println(score.getName() + "=" + score.getText());
            
        }
    }
}

3.2.2 生成xml文件

public class TestXml2 {

public static void main(String[] args) throws Exception {

// [1] 通过DocumentHelper生成一个Document对象

Document doc = DocumentHelper.createDocument();

// [2] 添加并得到根元素

Element root = doc.addElement("books");

// [3] 为根元素添加子元素

Element book = root.addElement("book");

// [4] 为book元素添加属性

book.addAttribute("id", "b01");

// [5] 为book添加子元素

Element name = book.addElement("name");

Element author = book.addElement("author");

Element price = book.addElement("price");

// [6] 为子元素添加文本

name.addText("Thinking in Java");

author.addText("小伟");

price.addText("88");

// [7] 格式良好的输出

OutputFormat format = OutputFormat.createPrettyPrint();

XMLWriter writer = new XMLWriter(new FileWriter(new File("src/book2.xml")), format);

writer.write(doc);

// [8] 关闭资源

writer.close();

}

}

XML 和 DTD的更多相关文章

  1. 【PHP XML与dtd概述【完整版】】

    一.XML文件简介 关于XML的大多数人都知道一些,HTML->xhtml->xml,这个顺序本来应当是HTML发展的顺序. XML可以当做配置文件使用,还可以充当小型的数据库. vers ...

  2. XML约束——DTD约束

    参考: 方立勋老师的讲课视频.   什么是XML约束 •在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束. 为什么需要XML约束 常用的约束技术 •XML DTD • ...

  3. xml约束DTD演示

    此演示xml和DTD在一个文件中 book.xml <?xml version="1.0" encoding="utf-8"?> <!DOCT ...

  4. jdom dom4j解析xml不对dtd doctype进行验证(转)

    一.写在所有之前:因为dom4j和jdom在这个问题上处理的方法是一模一样的,只是一个是SAXBuilder 一个SAXReader,这里以jdom距离,至于dom4j只需要同理替换一下就可以了.二. ...

  5. 【JAVA与XML、dtd约束、Schema约束】

    一.XML. (1)XML:Extensible Markup Language (2)XML是一种标记语言. (3)XML的设计宗旨是传输数据,而不是显示数据. (4)XML标签没有被预定义,即使用 ...

  6. 【php基础】XML,DTD实例

    要求一:能看懂别人写的DTD文件,自己能写更好.例如products.dtd: <!ENTITY AUTHOR "John Doe"> <!ENTITY COMP ...

  7. javaweb学习总结八(xml约束DTD)

    一:XML约束概念 xml约束:可以编写一个文档来约束xml文件的书写规范. xml语言格式比较严谨,不可能让程序员随意编写,所以必须要有约束. 二:常用的xml约束技术 1:DTD,document ...

  8. 关于XML的DTD概述

    1 DTD概述 1.1 什么是DTD DTD(Document Type Definition),文档类型定义,用来约束XML文档.或者可以把DTD理解为创建XML文档的结构!例如可以用DTD要求XM ...

  9. xml技术DTD约束定义

    XML约束 在XML技术中,可以编写一个文档来约束一个xml文档的书写规范,这称之为XML约束为什么需要XML约束? class.xml <stu><面积>?人怎么会有面积元素 ...

随机推荐

  1. tensorflow 1.0 学习:模型的保存与恢复(Saver)

    将训练好的模型参数保存起来,以便以后进行验证或测试,这是我们经常要做的事情.tf里面提供模型保存的是tf.train.Saver()模块. 模型保存,先要创建一个Saver对象:如 saver=tf. ...

  2. java提高(9)---HashMap解析

    HashMap解析(一) 平时一直再用hashmap并没有稍微深入的去了解它,自己花点时间想往里面在深入一点,发现它比arraylist难理解很多. 数据结构中有数组和链表来实现对数据的存储,但这两者 ...

  3. Ansible系列之roles使用说明

    roles(角色)介绍 ansible自1.2版本开始引入的新特性,用于层次性,结构化地组织playbook.roles能够根据层次型结构自动装载变量文件.tasks以及handlers等.要使用ro ...

  4. DHCP服务器的搭建

    dhcp笔记整理:http://services.linuxpanda.tech/DHCP/index.html 1 dhcp简介 DHCP原理 动态主机配置协议(Dynamic Host Confi ...

  5. 【原创】c++拷贝初始化和直接初始化的底层区别

    说明:如果看不懂的童鞋,可以直接跳到最后看总结,再回头看上文内容,如有不对,请指出~ 环境:visual studio 2013(编译器优化关闭) 源代码 下面的源代码修改自http://blog.c ...

  6. 为什么你作为一个.NET的程序员工资那么低?

    最近看到很多抱怨贴,也许有一定的道理,但是你想过没,为什么大部分.NET程序员工资相对低?我个人是这么看的: 大批半罐子水的程序员,永远被局限在.NET的原始的小圈圈里.前端不会(你放弃了一项很重要的 ...

  7. Perl处理数据(一):s替换、split和join

    s替换 m//模式用来匹配文本,也就是说用来找数据.而s///用来查找并替换文本,所以可以用来处理文本文件.在有了正则的基础之后,s///用起来会简单很多. 用法格式为: $str =~ s/reg/ ...

  8. 解决QTableWidget不显示数据的问题

    QTableWidget通常用于数据的展示,通过其表格布局可以让用户更清晰的查看数据,同时也让数据的筛选变得更加直观. 不过,初学者们和粗心大意的人总是会发现明明自己数据已经正常添加,可是程序运行之后 ...

  9. Python GUI

    1.flexx Flexx 是一个纯Python工具包,用来创建图形化界面应用程序.其使用 Web 技术进行界面的渲染.你可以用Flexx来创建桌面应用,同时也可以导出一个应用到独立的 HTML 文档 ...

  10. Flask-Mail

    WOW! 我的大号QQ收到了小号QQ的邮件! 小玩Flask-Mail 先到小号邮箱开启服务并获取获取授权码  https://jingyan.baidu.com/article/b0b63dbf1b ...