jaxp解析xml

来源:互联网 发布:怎样举报网络非法赌博 编辑:程序博客网 时间:2024/06/05 09:52
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
 *抽象类

 *用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 stubif(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{@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException {// TODO Auto-generated method stubsuper.startElement(uri, localName, qName, attributes);System.out.print("<"+qName+"/>");}@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException {// TODO Auto-generated method stubsuper.endElement(uri, localName, qName);System.out.print("<"+qName+"/>");}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException {// TODO Auto-generated method stubsuper.characters(ch, start, length);System.out.print(new String(ch,start,length));}}




0 0
原创粉丝点击