javaweb之xml以及其约束
命名规范一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:
区分大小写,例如,<P>和<p>是两个不同的标记。
不能以数字或"_" (下划线)开头。
不能以xml(或XML、或Xml 等)开头。
不能包含空格。
名称中间不能包含冒号(:)。
一个标签可以有多个属性,每个属性都有它自己的名称和取值,例如:
<input name=“text”>
属性值一定要用双引号(")或单引号(')引起来
定义属性必须遵循与标签相同的命名规范
多学一招:在XML技术中,标签属性所代表的信息,也可以被改成用子元素的形式来描述,例如:
<input>
<name>text</name>
</input>
转义字符
< <
& &
" "
' '
只有"<" 字符和"&"字符对于XML来说是严格禁止使用的
CDATA区
在编写XML文件时,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。
语法:<![CDATA[ 内容 ]]>
<![CDATA[
<itcast>
<br/>
</itcast>
]]>
处理指令
简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。
处理指令必须以“<?”作为开头,以“?>”作为结尾,XML声明语句就是最常见的一种处理指令。
<? xml version="1.0" encoding="utf-8"?>
例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容。
<?xml-stylesheet type="text/css" href="p.css"?>
常用的约束技术
XML DTD (Document Type Definition),全称为文档类型定义
XML Schema
DTD约束----外部引入
DTD文件在本地
在xml文件中引用DTD的方式:
<!DOCTYPE 文档根结点 SYSTEM "">
例如: <!DOCTYPE 书架 SYSTEM “book.dtd”>
DTD文件在公用的网络
在xml文件中引用DTD的方式:
<!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
例如:<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
DTD属性定义2
#REQUIRED:必须设置该属性
#IMPLIED:可以设置也可以不设置
#FIXED:说明该属性的取值固定为一个值,在 XML 文件中不能为该属性设置其它值。但需要为该属性提供这个值
直接使用默认值:在 XML 中可以设置该值也可以不设置该属性值。若没设置则使用默认值。
常用属性值类型
CDATA:表示属性值为普通文本字符串。
ENUMERATED (枚举)
ID
38 属性值类型ENUMERATED
属性的类型可以是一组取值的列表,在 XML 文件中设置的属性值只能是这个列表中的某个值(枚举)
<?xml version = "1.0" encoding="utf-8"?>
<!DOCTYPE 购物篮 [
<!ELEMENT 购物篮 (肉+)>
<!ELEMENT 肉 EMPTY>
<!ATTLIST 肉 品种 ( 鸡肉 | 牛肉 | 猪肉 | 鱼肉 ) "鸡肉">
]>
<购物篮>
<肉 品种="鱼肉"/>
<肉 品种="牛肉"/>
<肉/>
</购物篮>
实体(Entity)定义
实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
在DTD定义中,一条<!ENTITY …>语句用于定义一个实体。
40 语法格式:
<!ENTITY 实体名称 “实体内容” >
引用方式:&实体名称;
<!DOCTYPE person [
<!ENTITY resume "I am a programmer1">
<!ELEMENT person (#PCDATA)>
<!ATTLIST person name CDATA #REQUIRED>
]>
<person name="Tom">&resume;</person>
44 XML解析方式分为三种:dom、sax和pull
dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式。
sax: (Simple API for XML) 不是官方标准,但它是 XML 社区事实上的标准,几乎所有的 XML 解析器都支持它。
pull: Pull解析和Sax解析很相似,都是轻量级的解析,它是一个第三方开源的Java项目,但在Android的内核中已经嵌入了Pull 。
XML解析开发包
Jaxp(javax.xml、org.w3c.dom 、org.xml.sax )
Jdom、dom4j
Node appendChild(newChild)
将新的节点添加为最后一个子节点
insertBefore(newChild,refChild)
在某个子节点前插入一个新子节点
removeChild(oldChild)
删除指定的某个子节点
replaceChild(newChild,oldChild)
将指定的子节点替换成新的子节点
setTextContent(textContent)
设置文本内容(一般用在元素对象上)
getNodeName()
得到节点名称(一般用在元素对象上)
getParentNode()
得到父节点(一般用在元素对象上)
getTextContent()
得到文本内容(一般用在元素对象上)
getFirstChild()
得到第一个子节点
getLastChild()
得到最后一个子节点
getNextSibling()
得到下一个兄弟节点
getPreviousSibling()
得到上一个兄弟节点
Document createElement(name)
创建一个指定名称的标签对象返回
getDocumentElement ()
得到文档的根元素对象
getElementById(id)
根据子元素的id属性找到对应的子元素
getElementsByTagName(name)
根据标签名得到对应的子标签的集合
Element
setAttribute(name, value)
设置元素的属性名和属性值
removeAttribute(attrName)
根据属性名删除对应的属性
getAttribute(attrName)
根据属性名得到对应的属性
getElementsByTagName(name)
根据标签名得到对应的子标签的集合
getTagName() 得到标签名
Attr、Text 极少直接操作这两个接口的对象,一般通过Element对象来操作
NodeList getLength()得到包含的节点对象的个数 item(index)根据下标得到某个节点
DOM解析XML
以DOM的方式加载xml文件
//通过解析器对象解析一个文件对象得到Document对象
Document document =
DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new File("d:/users.xml"));
更新XML文件 (将document写入某个文件如“D\\users.xml"中)
Source xmlSource = new DOMSource(document);
Result outputTarget = new StreamResult(new File(“D\\users.xml"));
TransformerFactory.newInstance().newTransformer().transform(xmlSource, outputTarget);