一、jaxp查询
//查询所有name元素的值
/*
* 1.创建解析器工厂
* 2.根据解析器工厂创建解析器
* 3.解析xml返回document
* 4.得到所有的name元素
* 5.返回集合,遍历集合,得到每一个name元素
* */
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
NodeList list = document.getElementsByTagName("name");
//遍历集合
for(int i=0;i<list.getLength();i++){
Node name1=list.item(i);
//得到name元素里面的值
String s1=name1.getTextContent();
System.out.println(s1);
}
二、jaxp添加
在第一个p1下面,添加一个male
public static void addSex() throws Exception{
/*
* 1.创建解析器工厂
* 2.创建解析器
* 3.解析xml,得到document
*
* 4.得到第一个p1(得到所有p1,使用item方法下标得到)
* 5.创建sex标签createElement
* 6.创建文本createTextNode
* 7.把文本添加到sex下面,appendChild()
* 8.把sex添加到第一个P1下面
*
* 9.对xml进行了修改,需要回写xml
* */
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/person.xml");
//得到所有的p1
NodeList list = document.getElementsByTagName("p1");
//得到第一个P1
Node p1 = list.item(0);
//创建标签
Element sex1 = document.createElement("sex");
//创建文本
Text text1 = document.createTextNode("male");
//把文本添加到sex1下面
sex1.appendChild(text1);
//把sex1添加到P1下面
p1.appendChild(sex1);
//回写xml
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
transformer.transform(new DOMSource(document), new StreamResult("src/person.xml"));
}
三、jaxp修改
public static void modifySex() throws Exception{
/*
* 1.创建解析器工厂
* 2.创建解析器
* 3.解析xml,得到document
*
*4. 得到sex item方法
*5.修改sex里面的值, setTextContent方法
*
*6.回写xml
*/
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
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"));
}
四、jaxp遍历节点
//递归遍历的方法
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的子节点
list1(node1);
}
}
//不用回写xml