JAXP:是sun公司开发的一套对xml的解析
它由javax.xml.parsers 、org.w3c.dom 、org.xml.sax包及其子包组成
JAXP有2种解析方式:
一、dom解析:将文档读取进内存,生产Document对象
二、sax解析:从上往下读,读取一行处理一行
dom优点:对文档CRUD方便
缺点:内存消耗大
sax优点:内存消耗小,解析速度快、适合读取文档
缺点:CUD不方便
实例xml文档
.Net wht javaEE www
dom解析步骤
创建dom工厂 DocumentBuilderFactory得到dom解析器 DocumentBuilder读取xml文档,得到 Documentpackage Jaxp.dom; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.junit.Test; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class Dom { //读取文档中的一个指定标签 @Test public void read1() throws Exception{ //1、创建dom工厂 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //2、创建解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3、读取xml文件 产生Document对象 Document document=builder.parse("src/book.xml"); Node node=document.getElementsByTagName("书").item(0); System.out.println(node.getNodeName()); } //读取整个文档的标签 @Test public void read2() throws Exception{ //1、创建dom工厂 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //2、创建解析器 DocumentBuilder builder=factory.newDocumentBuilder(); //3、读取xml文件 产生Document对象 Document document=builder.parse("src/book.xml"); Node root=document.getElementsByTagName("书架").item(0); list(root); } private void list(Node node) { // TODO Auto-generated method stub System.out.println(node.getNodeName()); NodeList nodes=node.getChildNodes(); for(int i=0;i
sax解析步骤 创建sax工厂 SAXParserFactory得到sax解析器 SAXParser得到读取器 XMLReader设置内容处理处理器 reader.setContentHandler()读取xml文档package Jaxp.sax; 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.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; public class Demo { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { //1、创建sax工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //2、得到解析器 SAXParser saxParser=factory.newSAXParser(); //3、得到读取器 XMLReader reader=saxParser.getXMLReader(); //4、设置内容处理器 reader.setContentHandler(new XMLHandler()); //5、读取xml文档 reader.parse("src/book.xml"); } } class XMLHandler implements ContentHandler{ @Override public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException { // TODO Auto-generated method stub System.out.println("<"+qName+">"); for(int i=0;i "); } @Override public void characters(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub System.out.println(new String(ch,start,length)); } @Override public void setDocumentLocator(Locator locator) { // TODO Auto-generated method stub } @Override public void startDocument() throws SAXException { // TODO Auto-generated method stub } @Override public void endDocument() throws SAXException { // TODO Auto-generated method stub } @Override public void startPrefixMapping(String prefix, String uri) throws SAXException { // TODO Auto-generated method stub } @Override public void endPrefixMapping(String prefix) throws SAXException { // TODO Auto-generated method stub } @Override public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException { // TODO Auto-generated method stub } @Override public void processingInstruction(String target, String data) throws SAXException { // TODO Auto-generated method stub } @Override public void skippedEntity(String name) throws SAXException { // TODO Auto-generated method stub } }
sun公司提供了DefaultHandler
package Jaxp.sax; 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.ContentHandler; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; import org.xml.sax.helpers.DefaultHandler; public class Demo2 { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { //1、创建sax工厂 SAXParserFactory factory=SAXParserFactory.newInstance(); //2、得到解析器 SAXParser saxParser=factory.newSAXParser(); //3、得到读取器 XMLReader reader=saxParser.getXMLReader(); //4、设置内容处理器 reader.setContentHandler(new TagValue()); //5、读取xml文档 reader.parse("src/book.xml"); } } //获取第二个 作者的名字 class TagValue extends DefaultHandler{ private String currentTag; private int currentNum; private int needTagNum=2; @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { currentTag=qName; if(currentTag.equals("作者")){ currentNum++; } } @Override public void characters(char[] ch, int start, int length) throws SAXException { if("作者".equals(currentTag)&¤tNum==needTagNum){ System.out.println(new String(ch,start,length)); } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { currentTag=null; } }