您的位置:首页 > 编程语言 > Java开发

XML基础知识总结

2016-11-24 22:09 148 查看

Xml基础知识

1.XML属性

2.XML得约束:排除一些不需要的条件

dtd约束:

1.创建后缀名为.dtd文件

1.看xml中有多少个元素,有多少个就在dtd中写几个

Schema约束:

1.定义

Schema符合xml语法,xml语句。xml中可以包含多个Schema,通过名称空间来区分(类似于java的包),

可以直接用Int string 类型来定义,但是Schema更复杂。

2.创建一个Schema文件:

复杂元素:

<complexType>


<sequence>


简单元素:

</sequence>


</complexType>


* * *

<sequence>
:出现的元素是按照顺序的

<all>
:单个标签只能出现一个

<choice>
:子标签只能出现一个

<any>
:随便出现一个标签

maxOccurs=”unbounded” :在子标签中,表示标签可以出现无数次

<attribute>
:定义属性,只有在复杂元素中才可以定义属性,在
</complexType>
前面写

两个Schema应用的时候,用引入Schema别名:标签名称

* 比如
<check:name></check:name>
这种方法调用

在xml中引入约束xsd

* xmlns:check=”http://www.w3.org/2001/XMLSchema-instance” “-instance”表示被约束的意思

* xmlns=”http://www.example.org/jaxpText_02”

* check:schemaLocation=”http://www.example.org/jaxpText_02 jaxpText_02.xsd”

* check是用户自定义的名称,xmlns:的值为xsd中targetNamespace的值

* checj:schemaLocation=“targetNamespace的值 xsd的文件名称”

3.XML和java的结合

1.使用dom解析xml(内存中分配树装结构)

2.使用sax解析:采用事件驱动,边读变解析(从上到下,一行一行的解析,解析到一个对象,返回对象名)

4.XML的解析

1.dom解析

documentBuilder:解析器类

抽象类 不能直接new 要使用documentBuilderFactory.newdocumentBuilder调用

1.直接解析xml方法:parse(“xml路径”),返回整个Document文档

Document document = bulider.parse("XML路径");


2.document的父节点是Node

document的方法:

getElementsByTagName :返回得到的标签,集合

createElement :创建标签

createTextNode :创建文本内容

appendChild :将内容插到末尾(粘贴)

NodeLise(数组):

getlength() :获得数组的长度

item(数组) :获得当前位置的值

getTextContent() :得到标签中的内容

3.将在dom解析器中写的内容回写到xml中,利用这个方法回写

TransformerFactory factory = TransformerFactory.newInstance();

Transformer transformer = factory.newTransformer();

transformer.transform(new DOMSource(document), new StreamResult("src/jaxpText_01.xml""xml路径"));


documentBuilderFactory :解析器工厂

_也是抽象类,使用newInstance()调用

DocumentBuilderFactory builderfactory = DocumentBuilderFactory.newInstance();创建实例builderfactory _

2.sax解析

SAXParser:解析类

通过SAXParserFactory .newSAXParser来得到;

parise(“xml路径”,”执行的事件”);

{

startElement():解析开始标签,返回qName:标签名称

characters() :解析文本内容,通过string构造方法返回

endElement() :解析结束标签,也是通过qName返回标签名称

} 都是自动完成的。

SAXParserFactory :解析器工厂通过newInstance()来得到。

3.dom4j解析(重点)

1.导入dom4j的包

2.得到document

SAXReader reader = new SAXReader();

Document document = reader.read(url);


document的父接口是Node

document方法:

getRootElement:获取根节点,返回为Element,

Element的父接口也是Node

创建解析器

得到document

得到根节点

* 节点.element(“标签名称”):得到节点下第一个标签为“标签名称”的节点

* 节点.elements(”标签名称”):得到节点下第一层为“标签名称”的所有节点,为list类型,使用list.get(int)获取是第几个子标签

* 节点.element() :得到节点下第一层的所有标签,也是list类型。

* 使用getText()方法获得标签中的值

* 添加子标签直接使用.addElement(),添加文本直接使用setText().

指定位置插入一个标签:

* 主要是调用list中的add(”位置”,”标签的方法”);

* 所以在某一个复杂元素中插入必须是得到所有的简单元素

* 辅助方法:DocumentHelper.createElement(“标签名称”);来新建一个element

得到属性值(不需要回写xml):

* 标签名称.attributeValue (属性名称);

回写xml:

OutputFormat format = OutputFormat.createPrettyPrint();//定义xml文件的样式

XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/jaxpText_dom4j_01.xml"),format);//直接new XMLWriter的类传入两个参数第一个文件路径,第二个文件格式

xmlWriter.write(document);//写入的为document

xmlWriter.close();//关闭这个流


3.dom4j对于xpath的支持:

* 第一种形式:/aaa /bbb/ccc /表示一层

* 第二种形式://aaa //表示得到所有的

* 第三种形式:* *表示得到所有元素

* 第四种形式:/bbb[1] [1]表示第一个元素[last]表示最后一个元素

* 第五中形式://@属性名称 得到所有含有属性名称的元素

* 第六中形式://aaa[@属性名称=“值”] 表示名称为bbb并且属性名称为这个值得元素

4.dom4j对于xpach的操作

selectNodes(“xpath语句”):获取多个节点

selectSingleNode(“xpath语句”):[b]获取单个节点[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xml string java class