1、JAXP的DOM方式API文档(*****)
2、JAXP的DOM方式操作(查找和添加节点)(*****)
3、JAXP的DOM方式操作(遍历、修改和删除节点)(*****)
====================================================================
1、jaxp的api的查看
** jaxp是javase的一部分
** jaxp解析器在jdk的javax.xml.parsers包里面
** 四个类:分别是针对dom和sax解析使用的类
DocumentBuilderFactory、DocumentBuilder、SAXParserFactory、SAXParser
*** dom:
DocumentBuilderFactory: 解析器工厂
- 这个类是一个抽象类,不能new,
newInstance() 获取 DocumentBuilderFactory 的实例。
DocumentBuilder : 解析器类
- 这个类也是一个抽象类,不能new,
此类的实例可以从 DocumentBuilderFactory.newDocumentBuilder() 方法获取
- 一个方法,可以解析xml, parse("xml路径") 返回是 Document 整个文档
- 返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找
在document里面方法
getElementsByTagName(String tagname)
-- 这个方法可以得到标签
-- 返回集合 NodeList
createElement(String tagName)
-- 创建标签
createTextNode(String data)
-- 创建文本
appendChild(Node newChild)
-- 把文本添加到标签下面
removeChild(Node oldChild)
-- 删除节点
getParentNode()
-- 获取父节点
NodeList list
- getLength() 得到集合的长度
- item(int index)下标取到具体的值
for(int i=0;i<list.getLength();i++) {
list.item(i)
}
Node节点是Document、Element、文本对象、属性对象的父亲。
getTextContent()
- 得到标签里面的内容
*** sax:
SAXParserFactory: 解析器工厂
SAXParser:解析器类
2、使用jaxp实现查询操作
*** 查询xml中所有的name元素的值
* 步骤
//查询所有name元素的值
1、创建解析器工厂
DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
2、根据解析器工厂创建解析器
DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
3、解析器解析xml返回 Document对象
Document document = documentBuilder.parse("src/person.xml");
4、得到所有的name元素
NodeList nodeList = document.getElementsByTagName("name");
5、返回集合,遍历集合,得到每一个name元素
- 遍历 getLength()、item()
- 得到元素里面值 使用 getTextContent()
for(int i=0;i<list.getLength();i++) {
Node node = list.item(i); //第i个节点,下标从0开始
String str = node.getTextContent(); //节点里面的值
}
3、使用jaxp添加节点
*** 在第一个p1下面(末尾)添加 <sex>nv</sex>
**步骤
1、创建解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
2、根据解析器工厂创建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
3、解析xml,返回document
Document document = builder.parse("src/person.xml");
4、得到第一个p1
- 得到所有p1,使用item方法下标得到
NodeList list = document.getElementsByTagName("p1");
Node p1 = list.item(0);
5、创建sex标签 createElement
Element sex1 = document.createElement("sex");
6、创建文本 createTextNode
Text text1 = document.createTextNode("nv");
7、把文本添加到sex下面 appendChild
sex1.appendChild(text1);
8、把sex添加到第一个p1下面
p1.appendChild(sex1);
9、回写xml ! 以上修改的都是修改的读到内存中的Document对象,必须回写到硬盘上才能更改!
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
4、使用jaxp修改节点
/*
* 1、创建解析器工厂
* 2、根据解析器工厂创建解析器
* 3、解析xml,返回document
* 4、得到sex item方法
* 5、修改sex里面的值 setTextContent方法
* 6、回写xml
* */
//创建解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//得到document
Document document = builder.parse("src/person.xml");
//得到sex
Node sex1 = document.getElementsByTagName("sex").item(0);
//修改sex值
sex1.setTextContent("nan");
//回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
5、使用jaxp删除节点
*** 删除<sex>nan</sex>节点
** 步骤
/*
* 1、创建解析器工厂
* 2、根据解析器工厂创建解析器
* 3、解析xml,返回document
* 4、获取sex元素
* 5、获取sex的父节点
* 6、删除使用父节点删除 removeChild方法
* 7、回写xml
* */
//创建解析器工厂
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
//创建解析器
DocumentBuilder builder = builderFactory.newDocumentBuilder();
//得到document
Document document = builder.parse("src/person.xml");
//得到sex元素
Node sex1 = document.getElementsByTagName("sex").item(0);
//得到sex1父节点
Node p1 = sex1.getParentNode();
//删除操作
p1.removeChild(sex1);
//回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
6、使用jaxp遍历节点
** 把xml中的所有元素名称打印出来
** 步骤
/*
* 1、创建解析器工厂
* 2、根据解析器工厂创建解析器
* 3、解析xml,返回document
* ====使用递归实现=====
* 4、得到根节点
* 5、得到根节点子节点
* 6、得到根节点子节点的子节点
* */
** 遍历的方法:递归遍历的方法
private static void list1(Node node) {
//判断是元素类型时候才打印
if(node.getNodeType() == Node.ELEMENT_NODE) {
System.out.println(node.getNodeName());
}
//得到一层子节点
NodeList list = node.getChildNodes();
//遍历list
for(int i=0;i<list.getLength();i++) {
//得到每一个节点
Node node1 = list.item(i);
//继续得到node1的子节点
//node1.getChildNodes()
list1(node1);
}
}
Jaxp解析器_DOM解析方式
猜你喜欢
转载自blog.csdn.net/weixin_42472048/article/details/81264771
今日推荐
周排行