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语句”):获取单个节点