一、xml

1.什么是XML:
是一种可扩展的标记语言,所有标记都可以自定义,常用来做配置文件和数据传输的载体
2.语法:
标签(元素):<元素名> 值 </元素名>
属性:在元素中 <元素名 属性名="值" 属性名="值" ...></元素名>
注意:元素可以嵌套,但不能交叉

补充:字符集编码
gbk,gb2312:这两种都是支持中文编码的
iso-8859-1:这是计算机默认的纯英文字符集编码
utf-8:国际字符集编码,也支持中文

xml注释:<!-- 注释内容 -->

3.dtd文档
作用是对xml文档的一个约束,可以直接写在xml文档中,也可以写外部文件中然后被引用
4.dtd语法:
PCDATA和CDATA的区别:他们都是dtd中的数据类型,PCDATA用来修饰元素会被解析,CDATA用来修饰属性不会被解析
符号:
*:表示任意匹配次数
+:1到多次
?:0-1次匹配
#REQUIRED:表示该属性必须出现
5.外部dtd文件的引入
a.系统内部引用,只能在当前系统,关键字:SYSTEM
<!DOCTYPE students SYSTEM "student.dtd">
b.公共引用,是通过网络,关键字:PUBLIC
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<!DOCTYPE students[
  <!ELEMENT students (student+)>
  <!ELEMENT student (name,gender,age,address)>
  <!ATTLIST student xh CDATA #REQUIRED>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT gender (#PCDATA)>
  <!ELEMENT age (#PCDATA)>
  <!ELEMENT address (city,street,zip)>
  <!ELEMENT city (#PCDATA)>
  <!ELEMENT street (#PCDATA)>
  <!ELEMENT zip (#PCDATA)>
]>

练习:
1.请写一个xml用来描述老师的信息
要求符合语法,能用浏览器渲染

2.写一个dtd文件
要求:
根元素是books
books元素下可以有1个或者多个book元素
book元素有bookid属性,并且必须出现
book元素下有 name,price,count,addr元素
addr元素可以为任意次数
addr元素下有 city,street元素

二.对于xml文档的解析与创建
1.解析就是将xml文档的内容读取到程序中
2.创建就是将程序中的数据封装到xml文件中

Dom解析过程:
把整个xml文档看做一个Document对象
xml文档中的所有元素包括标签和属性都称为节点(Node对象)
Node对象可以分为Element(元素)和Attribute(属性)
所有的数据对象是Text
1.解析过程
先获取document对象,再获取根节点,再一层层获取子节点

2.创建xml的过程
先创建一个document对象,再创建根节点,再创建所有的子节点,再把所有的子节点追加到相应的父节点,最后把文档对象输出

三、例子

  student.dtd

 <?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT students (student+)>
<!ELEMENT student (age,sex,phone,addr)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT addr (contry,city,street)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT contry (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT street (#PCDATA)>

  student.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE students[
<!ELEMENT students (student+)>
<!ELEMENT student (age,sex,phone,addr)>
<!ATTLIST student id CDATA #REQUIRED>
<!ELEMENT addr (contry,city,street)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT contry (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT street (#PCDATA)>
]> -->
<!DOCTYPE students SYSTEM "student.dtd">
<Students>
<student id="001">
<age>20</age>
<sex>男</sex>
<phone>119</phone>
<addr>
<contry>中国</contry>
<city>长沙</city>
<street>芙蓉路</street>
</addr>
</student>
<student id="002">
<age>20</age>
<sex>男</sex>
<phone>119</phone>
<addr>
<contry>中国</contry>
<city>长沙</city>
<street>芙蓉路</street>
</addr>
</student>
<student id="003">
<age>20</age>
<sex>男</sex>
<phone>119</phone>
<addr>
<contry>中国</contry>
<city>长沙</city>
<street>芙蓉路</street>
</addr>
</student>
</Students>

  books.xml

 <?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="hwua0001">
<name>java入门</name>
<price>34.00</price>
<count>200</count>
<author>allen</author>
<datetime>2017-01-01</datetime>
</book>
<book id="hwua0002">
<name>java初级</name>
<price>46.00</price>
<count>104</count>
<author>allen</author>
<datetime>2016-11-12</datetime>
</book>
<book id="hwua0003">
<name>java精通</name>
<price>88.00</price>
<count>100</count>
<author>allen</author>
<datetime>2017-04-11</datetime>
</book>
<book id="hwua0004">
<name>java放弃</name>
<price>10000</price>
<count>300</count>
<author>allen</author>
<datetime>2016-05-23</datetime>
</book>
</books>

  xml文件读取解析实例:

 package com.demo1122;

 import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; import org.junit.Test;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException; import com.sun.org.apache.xml.internal.serialize.OutputFormat;
import com.sun.org.apache.xml.internal.serialize.XMLSerializer; public class XmlDemo {
@Test
public void praseXml() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;// xml的文档构建对象
db = dbf.newDocumentBuilder(); Document dom = db.parse("src/com/demo1122/student.xml");// 把文件路径解析成一个document对象 // 获取根节点
Element root = dom.getDocumentElement();
// 获取根节点下的子节点
NodeList stus = root.getChildNodes();
// 迭代所有子节点
for (int i = 0; i < stus.getLength(); i++) {
if (stus.item(i).getNodeType() == 1) {
Element stu = (Element) stus.item(i);
String id = stu.getAttribute("id");
System.out.println("id" + id);
NodeList stuAttr = stu.getChildNodes();// 继续获取子节点下的所有子节点
for (int j = 0; j < stuAttr.getLength(); j++) {
if (stuAttr.item(j).getNodeType() == 1) {
System.out.println(stuAttr.item(j).getNodeName() + "=" + stuAttr.item(j).getTextContent());
}
}
}
}
} @Test
public void createXml() throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;// xml的文档构建对象
db = dbf.newDocumentBuilder(); Document doc = db.newDocument();// 创建一个新的document对象 // 创建一个元素
Element root = doc.createElement("animals"); // 继续创建子节点,为animals的子节点
Element animal = doc.createElement("animal");
animal.setAttribute("id", "an1001");// 为元素设置属性 // 继续为animal创建子节点
Element type = doc.createElement("type");
type.setTextContent("狗");// 为元素设置值 Element name = doc.createElement("name");
name.setTextContent("中华神犬"); // 把元素之间的关系追加
animal.appendChild(type);
animal.appendChild(name);
root.appendChild(animal);
doc.appendChild(root); // 将doc写入文件
// 将构建好的document输出到xml文档
OutputFormat format = new OutputFormat(doc);
format.setEncoding("gbk");
Writer w = new FileWriter("src/com/demo1122/animals.xml");
XMLSerializer xs = new XMLSerializer(w, format);
xs.asDOMSerializer();// 作为DOM的方式去序列化文档
xs.serialize(doc.getDocumentElement());// 输出根元素
w.close();
}
}

  animals.xml

 <?xml version="1.0" encoding="gbk"?>
<animals>
<animal id="an1001">
<type>狗</type>
<name>中华神犬</name>
</animal>
</animals>

16.xml的更多相关文章

  1. 16.XML语法、CDATA、约束(DTD、Schema)讲解

    xml主要用来描述数据,比如配置文件,网络之间传输数据等,并且在android中也经常用xml来布局,,接下来便来学习xml常用的东西 1.XML语法 xml语法分为: 1.1 文档声明 必须位于文档 ...

  2. WebService如何封装XML请求 以及解析接口返回的XML

    原 WebService如何封装XML请求 以及解析接口返回的XML 置顶 2019年08月16日 15:00:47 童子泛舟 阅读数 28 标签: XML解析WebService第三方API 更多 ...

  3. Unity中使用多构造函数(转)

    如果要实例化的类只有一个构造函数, 则使用方法很简单使用方法如下: 1 2 3 4 5 6 7 using (IUnityContainer container = new UnityContaine ...

  4. 使用CodeSmith快速生成映射文件和映射类

    一 CodeSmith简介 本文以表自动生成NHibernate的映射文件和映射类的实例来说明一下本软件的使用方法. CodeSmith是一种基于模板的代码生成工具,其使用类似于ASP.NET的语法来 ...

  5. ActiveMQ第二弹:使用Spring JMS与ActiveMQ通讯

    本文章的完整代码可从我的github中下载:https://github.com/huangbowen521/SpringJMSSample.git 上一篇文章中介绍了如何安装和运行ActiveMQ. ...

  6. 微信公共平台开发5 .net

    每次在于微信交互时,都要用到access_token,但是这个值限制的是有时间的,但是access_token,在以后的高级功能里面会经常用到,所以这里不得不这里对前面所讲解的access_token ...

  7. Powerdesigner自定义DBMS(以derby数据库为例)

    Powerdesigner自定义DBMS Powerdesigner以下简称PD.PD默认支持的DBMS不够用时,我们就需要自己定义了.以apache derby数据库为例.1.DBMS的定义文件PD ...

  8. .Net面試題

    初级.NET开发人员 - 任何使用.NET的人都应知道的 1. 描述线程与进程的区别? 进程是系统所有资源分配时候的一个基本单位,拥有一个完整的虚拟空间地址,并不依赖线程而独立存在.进程可以定义程序的 ...

  9. (转)【移动开发】Android中三种超实用的滑屏方式汇总(ViewPager、ViewFlipper、ViewFlow)

    转自: http://smallwoniu.blog.51cto.com/3911954/1308959 现如今主流的Android应用中,都少不了左右滑动滚屏这项功能,(貌似现在好多人使用智能机都习 ...

随机推荐

  1. 一些你可能不熟悉的JS知识点总结

    js代码暂时性死区 只要块级作用域存在let命令,它所声明的变量就“绑定”这个区域,不再受外部的影响.这么说可能有些抽象,举个例子: ? 1 2 3 4 5 var temp = 123; if(tr ...

  2. JS apply的巧妙用法以及扩展到Object.defineProperty的使用

    Math.max 实现得到数组中最大的一项 var array = [1,2,3,4,5]; var max = Math.max.apply(null, array); console.log(ma ...

  3. 如何制作微信动态表情包 GIF制作工具哪个好

    表情包已经成为我们生活聊天中必不可少的一部分,但是如何制作微信动态表情包呢?自己制作的表情包更加独有个性,今天小编带大家看一波原创表情包的制作方法吧! 使用工具:电脑 操作方法: 1.首先在手机上也是 ...

  4. Deep Learning - 1 神经网络

    Artificial Neuron 人工神经元有: Perceptrons(感知机) Sigmoid Perceptron 感知机input是多个二进制,output是一个二进制. graph LR ...

  5. MFC Bresesnham算法

    Bresesnham算法绘制直线段 Bresenham算法的意义:高效的将图形光栅化.其计算过程中均采用加法运算,故大大减少了程序的开销. 绘制直线段(MFC中) //传入参数:起点.终点,颜色 vo ...

  6. python语言学习--2

    第三天1. python代码缩进规则:具有相同缩进的代码被视为代码块,4个空格, 不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误. 2.list:[...] 用(名称任意 ...

  7. springboot 学习之路 6(集成durid连接池)

    目录:[持续更新.....] spring 部分常用注解 spring boot 学习之路1(简单入门) spring boot 学习之路2(注解介绍) spring boot 学习之路3( 集成my ...

  8. 【粗糙版】javascript的变量、数据类型、运算符、流程结构

    本文内容: javascript的变量 javascript的数据类型 javascript的运算符 javascript的流程结构 首发日期:2018-05-09 javascript的变量 创建变 ...

  9. 惰性求值——lodash源码解读

    前言 lodash受欢迎的一个原因,是其优异的计算性能.而其性能能有这么突出的表现,很大部分就来源于其使用的算法--惰性求值. 本文将讲述lodash源码中,惰性求值的原理和实现. 一.惰性求值的原理 ...

  10. Python minidom模块(DOM写入和解析XML)

    一.DOM写XML文件 #导入minidom from xml.dom import minidom # 1.创建DOM树对象 dom=minidom.Document() # 2.创建根节点.每次都 ...