Java xml解析

原文链接:https://blog.csdn.net/SWK1663093964/article/details/81106775

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");
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_35807964/article/details/81612377