XML
HTML--->---XHTML--->XML(描述数据,做配置文件)
====================================
XML语法:
文档声明 元素 属性 注释 CDATA 处理命令
====================================
文档声明:
<?xml version="1.0" encoding="UTF-8" standalone="yes/no" ?>
gb2312-->中文
standalone="yes/no"说明文档是否独立依赖另外的文档(IE浏览器不重视)用法不明确
==================================
元素/标签:element <a></a> 或 <a/>
==================================
属性:Attribute
方法一:<input name="text"> 属性也可改成元素的形式来描述
方法二:<input>
<name>text</name>
</input>
注释:
<!--注释-->
CDATA区域
该区域内的数据,XML将其原封不动的输出
<![CDATA[内容]]>
<![CDATA[数据内容原封不动输出]]>
处理指令:
如何解析XML(风格)文档内容,用CSS显示XML内容
<?xml-stylesheet type="text/css" href=" .CSS"?>
===================================================
***************************************************************
====================================================
XML约束
1.XML DTD(框架需要写DTD) struts基与XML文档,XML基于DTD,但是无法约束存放的数 字,所以被Schema替代
DTD: Document Type Definition(文档类型定义)
2.XML Schema(重点)
-----------------------------------------------------------------------------------
<?xml version="1.0" ?>
!doctype文件类型(本地DTD文件)
本地引用<!DOCTYPE 根节点 SYSTEM "book.dtd">---------->文件清单:
网络公共<!DOCTYPE 根节点 PUBULIC "DTD名称" "DTD文件的URL">(网上使用)
<书架> book.dtd(dtd文件有汉字使用UTF-8||Unicode保存)
<书> <!-- !element元素 #CDATA字符串-->
<书名>....</书名> <!ELEMENT 书架 (书+)>
<作者>...</作者> <!ELEMENT 书 (书名,作者,售价)>
<售价>...</售价> <!ELEMENT 书名 (#PCDATA)>
</书> <!ELEMENT 作者 (#PCDATA)>
<书> <!ELEMENT 售价 (#PCDATA)>
<书名>....</书名>
<作者>....</作者>
<售价>....</售价>
</书>
</书架>
---------------------------------------------------------------------------
DTD语法:
元素(element)定义:
<!ELEMENT 元素名称 元素类型>
元素类型可以是元素内容或类型
元素内容需要()起来
<!ELEMENT 书架(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
元素类型:
EMPTY:用于定义--空--元素
ANY:表示元素内容为--任何--类型
-----------------------------------------
元素内容用逗号隔开,表示内容出现的顺序必须与声明一致
<!ELEMENT 书架(书名,作者,售价)>
元素内容用|分割,表示任选其一 即多个只能出现一个
<!ELEMENT 书架(书名|作者|售价)>
元素内容可以用+ * ?表示元素出现的次数
+ 1次或多次(书+)
?0次或者1次(书?)
* 0次或者多次(书*)
-------------------------------------------------------------------
DTD定义属性
通过ATTLIST设置标签属性
语法格式:
<!ATTLIST element名称
属性名1 属性值 设置说明
属性名1 属性值 设置说明
......
>
例如:
<!ATTLIST 商品
类别 CDATA #REQUIRED(必须的)required
颜色 CDATA #IMPLIED(可选的)implied
颜色 CDATA #FIXED(固定值)页面作者fixed
>
属性值类型:
CDATA:纯文本的字符串
ENUMERATED:
ID:唯一性(字母开头,不能用数字开头)
ENTITY:(实体)entity
ENTITY:用于为一段内容创建一个变量,以后再XML文档中就可以使用别名引用这段内容.
---------------------------------------------------------------------------------------
ENTITY分为引用实体,参数实体
引用实体:主要在XML文档中被应用
语法格式:
<!ENTITY 实体名称 "实体内容" >直接转换成实体内容
引用方式:
&实体名称;(XML文档中写法)
参数实体: 被DTD文件自身使用,(在XML中声明)
语法格式:<!ENTITY %实体名称 "实体内容">
例如:
<!ENTITY % TAG_NAMES "姓名|电话">
<!ELEMENT 个人信息 (%TAG_NAMES;|生日)>
----------------------------------------------------------------------------
Schema 定义和描述XML模式的语言,克制DTD的局限性
schema不能像DTD定义实体,比DTD更加复杂并且逐步取代DTD
扩展名为.xsd 并且绑定在URL中
scheme文档为模式文档(约束文档),根据它写的文档叫做实例文档
根节点为schema
===================================================
***************************************************************
===================================================
XML编程(crud)增删改查
XML解析有两种:dom和sax(pull为android解析)
dom(Document Object Model)当做对象解析全部放入内存中
缺点:内存占用大容易内存溢出
优点:增删改查容易
sax(Simple API for XML)读一行解析一行
缺点:不能增删改查,只是读取
优点:内存消耗小 解析速度快
-----------------------------------------------------------------------------
JVM默认最大占用内存64M,否则抛出异常OutOfMemoryError
JVM虚拟机可以设置内存大小:
-Xmx80m(内存设为80M)
-----------------------------------------------------------------------------
XML解析开发包:
Jaxp(sun公司)(最差) Jdom dom4j(最好)
-----------------------------------------------------------------------------
Jaxp:
//得到Factory
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
// 得到DocumentBuilder解析器
DocumentBuilder builder = factory.newDocumentBuilder();
// 解析文档
Document document = builder.parse("src/NewFile.xml");
-------------------------------------------------------------------------------
{得到Element内容} "书名2" <书名>书名2</书名>
//Document读取 众多标签
NodeList list = document.getElementsByTagName("书名");
// 得到其中之一的标签,从0开始
Node node = list.item(1);
// 得到节点内容
String s = node.getTextContent();
-------------------------------------------------------------------------------
{得到所有标签}得到父亲,根据父亲得到孩子
Node node = Document.getElementsByTagName("标签");
NodeList list = node.getChildNodes();所以的孩子
//循环出每一个孩子
for (int i = 0; i < list.getLength(); i++) {
Node node2 = list.item(i);
}
---------------------------------------------------------------------------------
{得到标签属性}
//将得到的标签 Node强制转换成Element
Element node = (Element) document.getElementsByTagName("书名").item(0);
//得到标签属性。需要把Node转换成Element
String s = node.getAttribute("name");
---------------------------------------------------------------------------------
{添加Element}
Elemetn element = document.createElement("节点")
element.setTextContent("内容");
//写入XML中要先得到Element
Elemetn book = (Elemetn)document.getElementsByTagName("书").item(0)
//带上孩子
book.appendChild(element);
//更新后的内存数据写入XML中
TransformerFactory factory = TransformerFactory.newInstance();
//得到转换器
Transformer tran = factory.newTransformer();
tran.transform(new Domsource(document),new StreamResult(new FileOuputStream("src/.xml")));
//在指定的地方添加Element(在参考Element之前插入新Element)
1,创建新Element
2,得到参考Element
3,得到挂崽的父类Element
在父类插崽 父类.insetBefor(新建的Element,参考Element);
//删除Element
1.得到要删除的Element
2.得到要删除的Element的父节点
3.类删除儿子的方法 删除方法:remove | delete | kill
方法2;
1.得到要删除的Element
2.getParentNode();得到父节点
3.removeChild(自己);
getParentNode().getParentNode().removeChild(父节点) 用爷节点删除父节点
//更新
1.得到需要更新的Element
2.设置新的内容.
浙公网安备 33010602011771号