Java XML解析

1.DOM解析

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

public class DomParseXML {
    DocumentBuilder db;
    Document document;

    public Document   getDocument() throws Exception
    {
        //创建解析器对象
        DocumentBuilder db=DocumentBuilderFactory.newInstance().newDocumentBuilder();
        //加载XML文档
        Document document=db.parse("src/bookstore.xml");
        return document;

    }

    //1.获得某个具体的节点
    public  void getSpecificNode(Document document)
    {
        NodeList nl=((org.w3c.dom.Document) document).getElementsByTagName("售价");
        Node node=nl.item(1);
        String text=node.getTextContent();
        System.out.println("核心技术卷售价是:"+text);
    }
    //2.遍历所有的元素节点
    public void getAllNode(Node node)
    {
        NodeList nl=node.getChildNodes();
        for(int i=0;i<nl.getLength();i++)
        {
            Node n=nl.item(i);
            if(n.getNodeType()==Node.ELEMENT_NODE)
            {
                System.out.println(n.getNodeName());
                getAllNode(n);
            }

        }
    }
    //3.修改某个元素节点的主体内容
    public  void modifyContent(Document document) throws Exception
    {
        NodeList nl=document.getElementsByTagName("售价");
        Node node=nl.item(1);
        node.setTextContent("$80");
        Transformer tf=TransformerFactory.newInstance().newTransformer();
        tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
    }
    //4.向指定元素节点中增加子元素节点
    public  void addSonNode(Document document) throws Exception, Error
    {
         NodeList nl=document.getElementsByTagName("售价");
         Node node=nl.item(0);
         Element el=document.createElement("内部价");
         el.setTextContent("$50");
         node.appendChild(el);
         Transformer tf=TransformerFactory.newInstance().newTransformer();
        tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));

    }
    //5.向指定元素节点中增加同级元素节点
    public  void addNode(Document document) throws TransformerFactoryConfigurationError, TransformerException
    {
         NodeList nl=document.getElementsByTagName("书");
         Node node=nl.item(0);
         Element el=document.createElement("批发价");
         el.setTextContent("$20");
         node.appendChild(el);
         Transformer tf=TransformerFactory.newInstance().newTransformer();
        tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
    }
    //6.删除指定元素节点
    public  void deleteNode(Document document) throws TransformerFactoryConfigurationError, TransformerException
    {
        NodeList nl=document.getElementsByTagName("内部价");
        Node node=nl.item(0);
        node.getParentNode().removeChild(node);
        Transformer tf=TransformerFactory.newInstance().newTransformer();
        tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
    }
    //7.操作XML文件属性
    public  void operateAttribute(Document document) throws TransformerFactoryConfigurationError, TransformerException
    {
        NodeList nl=document.getElementsByTagName("书");
        Node node=nl.item(0);
        ((Element)node).setAttribute("languange", "Chinese");
        Transformer tf=TransformerFactory.newInstance().newTransformer();
        tf.transform(new DOMSource(document), new StreamResult("src/bookstore.xml"));
    }

    public static  void main(String[] args) throws Exception
    {
        DomParseXML dpx=new DomParseXML();
        Document document=dpx.getDocument();
        //dpx.getSpecificNode(document);
        //dpx.getAllNode(document);
        //dpx.modifyContent(document);
        //dpx.addSonNode(document);
        //dpx.addNode(document);
        //dpx.deleteNode(document);
        dpx.operateAttribute(document);
    }

}

2.SAX解析

	import javax.xml.parsers.SAXParser;
	import javax.xml.parsers.SAXParserFactory;
	
	import java.util.ArrayList;
	import java.util.List;
	
	import org.xml.sax.Attributes;
	import org.xml.sax.SAXException;
	import org.xml.sax.XMLReader;
	import org.xml.sax.helpers.DefaultHandler;
	
	public class SaxParseXml {
	    public static void main(String[] args) throws Exception
	    {
	        //创建解析器
	        SAXParser sax=SAXParserFactory.newInstance().newSAXParser();
	        //获取内容读取器
	        XMLReader xml=sax.getXMLReader();
	        //注册一个内容处理器
	        xml.setContentHandler(new DefaultHandler(){
	
	            String curName = "" ;  //记录当前是那个标签
	            int index = 0 ;  //记录读取到了那个作者
	            Book book = null ;
	
	            //当解析文档开始时调用
	            public void startDocument() throws SAXException {
	                super.startDocument();
	                System.out.println("文档解析开始了");
	            }
	
	            //当解析文档结束时调用
	            public void endDocument() throws SAXException {
	                super.endDocument();
	                System.out.println("文档解析结束了");
	            }
	
	            //当解析到开始标签时调用
	            public void startElement(String uri, String localName, String qName, Attributes attributes)
	                    throws SAXException {
	                super.startElement(uri, localName, qName, attributes);
	                System.out.println(qName+"标签解析开始了");
	
	                if(qName.equals("书")){
	                    book = new Book() ;
	                }
	                curName = qName ;
	            }
	
	            //当解析到结束标签时调用
	            public void endElement(String uri, String localName, String qName) throws SAXException {
	                super.endElement(uri, localName, qName);
	                System.out.println(qName+"标签解析结束了");
	
	                if(qName.equals("书")){
	                    list.add(book) ;
	                }
	                curName = null ;
	            }
	
	            //当解析到文本时调用
	            public void characters(char[] ch, int start, int length) throws SAXException {
	                super.characters(ch, start, length);
	                System.out.println(new String(ch,start,length)+"文本");
	                if("书名".equals(curName))
	                    book.setBookName(new String(ch,start,length)) ;
	                if("作者".equals(curName))
	                    book.setAuthor(new String(ch,start,length)) ;
	                if("售价".equals(curName))
	                    book.setPrice(Float.parseFloat(new String(ch,start,length))) ;
	            }
	
	        });
	        xml.parse("src/bookstore.xml");
	    }
	}
posted @ 2018-07-18 22:51  vicoSong  阅读(111)  评论(0)    收藏  举报