JAXP解析XML概要
*jaxp是JavaSE的一部分
*jaxp解析器在javax.xml.parsers包里
dom:
DocumentBuilder:解析器类
DocumentBuilderBuilder:解析器工厂
sax:
SAXParser:解析器
SAXParserFactory:解析器工厂
-------------------------------------------------------
DOM:
DocumentBuilder
*抽象类
*用DocumentBuilderFactory.newDocumentBuilder()
获取实例
方法——
parse("xml路径"):解析xml文档,返回Document对象
****Document是一个接口,其父对象是Node
与js中相似的方法:
getElementsByTagName(String tagname)
——得到标签,返回集合
createElement(String tagname)
——创建标签
createTextNode(String data)
——创建文本
appendChild(Node newChild)
——把文本添加到标签下
removeChild()
——删除节点
getParentNode
——获取到父节点
...............
DocumentBuilderFactory
*抽象类
1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析xml,返回document
4.得到所有的name元素
5.遍历集合
三、修改节点内容
四、删除操作
SAX:不能实现增删改操作
解析方式:事件驱动,边读边解析
SAXParser:
*抽象类
*用SAXParseFactory.newSAXParser获取实例
——————方法:parser(File f,DefaultHandle dh)
File:xml路径
DefaultHandle:事件处理器
————startElement(Stirng url,String localName,
String qName,Attributes attributes)
————characters(char[] ch,int start,int length)
————endElement(Stirng url,String localName,
String qName)
SAXParseFactory:
*有newInstance()方法获取实例
*jaxp是JavaSE的一部分
*jaxp解析器在javax.xml.parsers包里
dom:
DocumentBuilder:解析器类
DocumentBuilderBuilder:解析器工厂
sax:
SAXParser:解析器
SAXParserFactory:解析器工厂
-------------------------------------------------------
DOM:
DocumentBuilder
*抽象类
*用DocumentBuilderFactory.newDocumentBuilder()
获取实例
方法——
parse("xml路径"):解析xml文档,返回Document对象
****Document是一个接口,其父对象是Node
与js中相似的方法:
getElementsByTagName(String tagname)
——得到标签,返回集合
createElement(String tagname)
——创建标签
createTextNode(String data)
——创建文本
appendChild(Node newChild)
——把文本添加到标签下
removeChild()
——删除节点
getParentNode
——获取到父节点
...............
DocumentBuilderFactory
*抽象类
*用newInstance()获取实例
对xml文档进行操作:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<preson>
<p1>
<name>xiaobai</name>
<age>20</age>
</p1>
<p1>
<name>xiaohua</name>
<age>20</age>
<sex>male</sex>
</p1>
</preson>
一、查询操作
1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析xml,返回document
4.得到所有的name元素
5.遍历集合
public static void selectAll() throws ParserConfigurationException,
SAXException, IOException {
DocumentBuilderFactory builderFActory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFActory.newDocumentBuilder();
Document document=builder.parse("src/1.xml");
//得到name元素
NodeList list = document.getElementsByTagName("name");
//遍历集合
for(int i=0;i<list.getLength();i++){
Node name1=list.item(i);
//得到name中的值
String s=name1.getTextContent();
System.out.println(s);
}
}
二、添加元素
1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析xml,返回document
4.得到要添加元素的父元素
5.创建标签
6.创建文本
7.将其文本添加到该标签下
8.将标签添加到其父标签下
9.回写xml
public static void addSex() throws Exception{
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document=builder.parse("src/1.xml");
NodeList list=document.getElementsByTagName("p1");
Node p1=list.item(0);
Element sex1=document.createElement("sex");
Text sexStr=document.createTextNode("male");
sex1.appendChild(sexStr);
p1.appendChild(sex1);
//回写
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/1.xml"));
}
三、修改节点内容
public static void modifySex() throws Exception{
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFactory.newDocumentBuilder();
Document document = builder.parse("src/1.xml");
NodeList list = document.getElementsByTagName("sex");
Node sex1=list.item(0);
sex1.setTextContent("famale");
//回写
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/1.xml"));
}
四、删除操作
1.创建解析器工厂
2.根据解析器工厂创建解析器
3.解析xml,返回document
4.得到要删除元素的父元素
5.得到该元素
6.将其从父元素下删除
7.回写xml
public static void delPerson() throws Exception{
DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = builderFactory.newDocumentBuilder();
Document document = builder.parse("src/1.xml");
Node p1 = document.getElementsByTagName("p1").item(0);
Node temp = document.getElementsByTagName("sex").item(0);
p1.removeChild(temp);
//回写
TransformerFactory transformerFactory=TransformerFactory.newInstance();
Transformer transformer=transformerFactory.newTransformer();
transformer.transform(new DOMSource(document),new StreamResult("src/1.xml"));
}
五、利用递归实现遍历
public static void allElement() throws Exception{
DocumentBuilderFactory builderFActory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder=builderFActory.newDocumentBuilder();
Document document=builder.parse("src/1.xml");
//遍历
all(document);
}
private static void all(Node node) {
// TODO Auto-generated method stub
if(node.getNodeType()==Node.ELEMENT_NODE){
String str=node.getNodeName();
System.out.println(str);
}
NodeList list = node.getChildNodes();
for(int i=0; i<list.getLength(); i++){
Node temp=list.item(i);
all(temp);
}
}
-----------------------------------------------------------------------------------------
SAX:不能实现增删改操作
解析方式:事件驱动,边读边解析
SAXParser:
*抽象类
*用SAXParseFactory.newSAXParser获取实例
——————方法:parser(File f,DefaultHandle dh)
File:xml路径
DefaultHandle:事件处理器
————startElement(Stirng url,String localName,
String qName,Attributes attributes)
————characters(char[] ch,int start,int length)
————endElement(Stirng url,String localName,
String qName)
SAXParseFactory:
*有newInstance()方法获取实例
import java.io.IOException;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class TextSax {
/**
* @param args
* @throws SAXException
* @throws ParserConfigurationException
* @throws IOException
*/
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
// TODO Auto-generated method stub
/*
* 1.创建解析器工厂
* 2.创建解析器
* 3.执行parse方法
* 4.创建类继承DefaultHandler
* 5.重写3个方法
* */
//创建解析工厂
SAXParserFactory saxParserFactory=SAXParserFactory.newInstance();
SAXParser saxParser=saxParserFactory.newSAXParser();
saxParser.parse("src/1.xml", new MyDefault());
}
}
class MyDefault extends DefaultHandler{
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// TODO Auto-generated method stub
super.startElement(uri, localName, qName, attributes);
System.out.print("<"+qName+"/>");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
System.out.print("<"+qName+"/>");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// TODO Auto-generated method stub
super.characters(ch, start, length);
System.out.print(new String(ch,start,length));
}
}