xml解析简介(写到Java代码)!!!!最重要的内容
*xml是标记型文档
*js使用dom解析标记型文档
-根据html的层级结构,在内存中分配一个树形结构,把html标签,属性和文字都封装成对象。
-document对象、element对象、属性对象、文本对象、Node节点对象。
*xml的解析方式(技术):dom和sax
画图分析使用dom和sax解析xml过程
**使用dom解析的特点:
***使用dom解析xml时,如果文件过大,会造成内存溢出
**使用dom很容易实现增删改查的操作。
解析步骤;采用事件驱动,边读边解析。从上到下一行一行的解析,
解析到某一个对象像标签、属性、文本等把这些对象的名称返回
**使用sax解析的特点:
优点:使用 sax 方式不会造成内存溢出因为它是边读边解析,从而实现查询。
缺点:使用 sax 方式解析就不能实现增删改操作。
*想要解析xml,首先需要解析器
**不同公司提供了,针对dom和sax方式的解析器,通过api方式提供
**sun公司提供了针对dom和sax解析器 jaxp
**dom4j组织,针对dom和sax解析器 dom4j **实际开发常用
**jdom组织,针对dom和sax解析器 jdom
jaxp的api的查看:
*jaxp时javase的一部分
*jaxp解析器在jdk的javax.xml.parsers包里面
**四个类分别针对dom和sax解析使用的类
***dom:
DocumentBuilder :解析器类
-这个类是一个抽象类 ,不能new
-这个类的一个实例可以从DocumentBuilderFactory.newDocumentBuilder()方法获得。
-一个方法,可以解析到xml parse("xml的路径") 返回是Document 整个文档
-返回的document是一个接口,父节点是Noode,如果在document里面找不到想要的方法,到Node里面去找
-在document里面方法:
-getElementByTagName(String tagname)
-这个方法可以得到标签
--返回集合NodeList
createElement(String tagName)
--创建标签
appendChild(Node newChild)
--把文本添加到标签下面
removeChild(Node oldChild)
--删除节点
getParentNode()
--获取父节点
NodeList
-getLength() 得到集合的长度
-item(int index)下标取到具体的值
for(int i = 0;i < list.getLength(); i++){
list.item(i)
}
DocumentBuilderFactory :解析器工厂
-这个类也是一个抽象类 ,不能new
-newInstance() 获得一个新的一个 DocumentBuilderFactory实例。
使用jaxp实现查询操作:
查询xml中所有的name元素的值
1.创建解析器工厂
DocumentBuilderFactory.newInstance();
2.根据解析器工厂获取解析器
documentBuilderFactory.newDocumentBuilder();
3.解析xml返回document
documentBuilder.parse("src/person.xml");
4.得到所有的name元素
document.getElementsByTagName("name");
5.遍历集合,得到每一个name元素
遍历 getLength() item()
list.item(i);//找到每一个name
得到元素里面的值 使用 getContent()
name1.getTextContent();
查询xml中第一个name元素的值
1.创建解析器工厂
DocumentBuilderFactory.newInstance();
2.根据解析器工厂获取解析器
documentBuilderFactory.newDocumentBuilder();
3.解析xml返回document
documentBuilder.parse("src/person.xml");
4.得到所有的name元素
NodeList list = document.getElementsByTagName("name");
//根据下标获取第一个name的值
Node item = list.item(0);
//取出内容
String name = item.getTextContent();
添加一个xml标签在第一个p1标签下
1.创建解析器工厂
DocumentBuilderFactory.newInstance();
2.根据解析器工厂获取解析器
documentBuilderFactory.newDocumentBuilder();
3.解析xml返回document
documentBuilder.parse("src/person.xml");
4.找到p1
document.getElementsByTagName("p1");
5.找到第一个元素
list.item(0);
6.创建元素
document.createElement("sex");
7.创建文本
document.createTextNode("nv");
8.把文本添加到标签下面
sex.appendChild(nv);
9.回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
修改xml文档:
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//获取解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//解析xml返回document
Document document = documentBuilder.parse("src/person.xml");
Node sex = document.getElementsByTagName("sex").item(0);
//修改节点内容
sex.setTextContent("男");
//回写xml
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));
删除xml标签:
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
//获取解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
//解析xml返回document
Document document = documentBuilder.parse("src/person.xml");
Node sex = document.getElementsByTagName("sex").item(0);
//得到sex元素
sex.getParentNode().removeChild(sex);
//回写xml
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/person.xml"));