亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java生成和解析XML格式文件和字符串的實例代碼

2019-11-26 15:41:59
字體:
來源:轉載
供稿:網友

1、基礎知識:
Java解析XML一般有四種方法:DOM、SAX、JDOM、DOM4J。

2、使用介紹
1)、DOM
(1)簡介

由W3C(org.w3c.dom)提供的接口,它將整個XML文檔讀入內存,構建一個DOM樹來對各個節點(Node)進行操作。優點就是整個文檔都一直在內存中,我們可以隨時訪問任何節點,并且對樹的遍歷也是比較熟悉的操作;缺點則是耗內存,并且必須等到所有的文檔都讀入內存才能進行處理。

(2)示例代碼:

復制代碼 代碼如下:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<root>
    <TelePhone>
        <type name="nokia">
            <price>599</price>
            <operator>CMCC</operator>
        </type>
        <type name="xiaomi">
            <price>699</price>
            <operator>ChinaNet</operator>
        </type>
    </TelePhone>
</root>

復制代碼 代碼如下:

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
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;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class XMLHandler {
    public XMLHandler(){
       
    }
   
    public String createXML(){
        String xmlStr = null;
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            Document document = builder.newDocument();
            document.setXmlVersion("1.0");
           
            Element root = document.createElement("root");
            document.appendChild(root);
           
            Element telephone = document.createElement("TelePhone");
           
            Element nokia = document.createElement("type");
            nokia.setAttribute("name", "nokia");
           
            Element priceNokia = document.createElement("price");
            priceNokia.setTextContent("599");
            nokia.appendChild(priceNokia);
           
            Element operatorNokia = document.createElement("operator");
            operatorNokia.setTextContent("CMCC");
            nokia.appendChild(operatorNokia);
           
            telephone.appendChild(nokia);
           
            Element xiaomi = document.createElement("type");
            xiaomi.setAttribute("name", "xiaomi");
           
            Element priceXiaoMi = document.createElement("price");
            priceXiaoMi.setTextContent("699");
            xiaomi.appendChild(priceXiaoMi);
           
            Element operatorXiaoMi = document.createElement("operator");
            operatorXiaoMi.setTextContent("ChinaNet");
            xiaomi.appendChild(operatorXiaoMi);
           
            telephone.appendChild(xiaomi);
           
            root.appendChild(telephone);
           
            TransformerFactory transFactory = TransformerFactory.newInstance();
            Transformer transFormer = transFactory.newTransformer();
            DOMSource domSource = new DOMSource(document);
           
            //export string
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            transFormer.transform(domSource, new StreamResult(bos));
            xmlStr = bos.toString();
           
            //-------
            //save as file
            File file = new File("TelePhone.xml");
            if(!file.exists()){
                file.createNewFile();
            }
            FileOutputStream out = new FileOutputStream(file);
            StreamResult xmlResult = new StreamResult(out);
            transFormer.transform(domSource, xmlResult);
            //--------
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (TransformerConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (TransformerException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
        return xmlStr;
    }
   
    public void parserXML(String strXML){
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            StringReader sr = new StringReader(strXML);
            InputSource is = new InputSource(sr);
            Document doc = builder.parse(is);
            Element rootElement = doc.getDocumentElement();
            NodeList phones = rootElement.getElementsByTagName("type");
            for (int i = 0; i < phones.getLength(); i++) {
                Node type = phones.item(i);
                String phoneName = ((Element)type).getAttribute("name");
                System.out.println("Phone name = "+phoneName);
                NodeList properties = type.getChildNodes();
                for (int j = 0; j < properties.getLength(); j++) {
                    Node property = properties.item(j);
                    String nodeName = property.getNodeName();
                    if (nodeName.equals("price")) {
                        String price=property.getFirstChild().getNodeValue();
                        System.out.println("price="+price);
                    } else if (nodeName.equals("operator")) {
                        String operator=property.getFirstChild().getNodeValue();
                        System.out.println("operator="+operator);
                    }
                }
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
   
    public static void main(String[] args) {
        XMLHandler handler = new XMLHandler();
        String xml = handler.createXML();
        System.out.println(xml);
        handler.parserXML(xml);
    }
}

(3)元素(Element)和結點(Node)的區別(org.w3c.dom)
Node對象是整個文檔對象模型的主要數據類型,是DOM中最基本的對象,代表了文檔樹中的抽象節點。但在實際使用中很少會直接使用Node對象,而是使用Node對象的子對象Element,Attr,Text等。
Element對象表示HTML或XML文檔中的一個元素,是Node類最主要的子對象,在元素中可以包含屬性,因而Element中有存取其屬性的方法。
Element是從Node繼承而來的,元素是一個小范圍的定義,必須是含有完整信息的結點才是一個元素,例如<div>...</div>。但是一個結點不一定是一個元素,而一個元素一定是一個結點。
node有幾個子類型:Element,Text,Attribute,RootElement,Comment,Namespace等

2)、SAX


3)、JDOM

4)、DOM4J
(1)簡介
dom4j是目前在xml解析方面是最優秀的(Hibernate、Sun的JAXM也都使用dom4j來解析XML),它合并了許多超出基本XML文檔表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文檔或流化文檔的基于事件的處理。
在使用XPATH時要增加jaxen.jar,否則會出現如下錯誤:

復制代碼 代碼如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/jaxen/JaxenException
at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)     
at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)

(2)示例代碼:

復制代碼 代碼如下:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.InputSource;

public class XMLHandler {

    public XMLHandler() {
        // TODO Auto-generated constructor stub
    }
   
    public String createXML(){
        String strXML = null;
        Document document = DocumentHelper.createDocument();
        Element root = document.addElement("root");
       
        Element phone = root.addElement("TelePhone");
       
        Element nokia = phone.addElement("type");
        nokia.addAttribute("name", "nokia");
        Element price_nokia = nokia.addElement("price");
        price_nokia.addText("599");
        Element operator_nokia = nokia.addElement("operator");
        operator_nokia.addText("CMCC");
       
        Element xiaomi = phone.addElement("type");
        xiaomi.addAttribute("name", "xiaomi");
        Element price_xiaomi = xiaomi.addElement("price");
        price_xiaomi.addText("699");
        Element operator_xiaomi = xiaomi.addElement("operator");
        operator_xiaomi.addText("ChinaNet");
       
        //--------
        StringWriter strWtr = new StringWriter();
        OutputFormat format = OutputFormat.createPrettyPrint();
        format.setEncoding("UTF-8");
        XMLWriter xmlWriter =new XMLWriter(strWtr, format);
        try {
            xmlWriter.write(document);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        strXML = strWtr.toString();
        //--------
       
        //-------
        //strXML=document.asXML();
        //------
       
        //-------------
        File file = new File("TelePhone.xml"); 
        if (file.exists()) { 
            file.delete(); 
        } 
        try {
            file.createNewFile();
            XMLWriter out = new XMLWriter(new FileWriter(file)); 
            out.write(document); 
            out.flush(); 
            out.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //--------------
       
        return strXML;
    }
   
    public void parserXML(String strXML){
        SAXReader reader = new SAXReader();
        StringReader sr = new StringReader(strXML);
        InputSource is = new InputSource(sr);
        try {
            Document document = reader.read(is);
           
            Element root = document.getRootElement();
           
            //get element
            List<Element> phoneList = root.elements("TelePhone");
            List<Element> typeList = phoneList.get(0).elements("type");
            for (int i=0;i<typeList.size();i++){
                Element element = typeList.get(i);
                String phoneName = element.attributeValue("name");
                System.out.println("phonename = "+phoneName);
                //get all element
                List<Element> childList = element.elements();
                for (int j=0;j<childList.size();j++){
                    Element e = childList.get(j);
                    System.out.println(e.getName()+"="+e.getText());
                }
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
   
    public void parserXMLbyXPath(String strXML){
        SAXReader reader = new SAXReader();
        StringReader sr = new StringReader(strXML);
        InputSource is = new InputSource(sr);
        try {
            Document document = reader.read(is);
            List list = document.selectNodes("/root/TelePhone/type");
            for(int i=0;i<list.size();i++){
                Element e = (Element) list.get(i);
                System.out.println("phonename="+e.attributeValue("name"));
                List list1 = e.selectNodes("./*");
                for(int j=0;j<list1.size();j++){
                    Element e1 = (Element) list1.get(j);
                    System.out.println(e1.getName()+"="+e1.getText());
                }
            }
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        XMLHandler handler = new XMLHandler();
        String strXML=handler.createXML();
        System.out.println(strXML);
        handler.parserXML(strXML);
        System.out.println("-----------");
        handler.parserXMLbyXPath(strXML);
    }

}

5)XPATH
(1)簡介
XPath是一門在XML文檔中查找信息的語言。XPath用于在XML文檔中通過元素和屬性進行導航。
具體語法介紹參考:http://w3school.com.cn/xpath/index.asp

(2)示例代碼:

復制代碼 代碼如下:

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class XMLHandler {

    public XMLHandler() {
        // TODO Auto-generated constructor stub
    }
   
    public void parserXML(String strXML){
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        try {
            DocumentBuilder builder = factory.newDocumentBuilder();
            StringReader sr = new StringReader(strXML);
            InputSource is = new InputSource(sr);
            Document doc = builder.parse(is);
           
            XPathFactory xFactory = XPathFactory.newInstance();
            XPath xpath = xFactory.newXPath();
            XPathExpression expr = xpath.compile("/root/TelePhone/type");
            NodeList phones = (NodeList) expr.evaluate(doc, XPathConstants.NODESET); 
            for (int i = 0; i < phones.getLength(); i++) {
                Node type = phones.item(i);
                String phoneName = ((Element)type).getAttribute("name");
                System.out.println("Phone name = "+phoneName);
                XPathExpression expr1 = xpath.compile("./*");
                NodeList list = (NodeList) expr1.evaluate(type, XPathConstants.NODESET);
                for(int j =0;j<list.getLength();j++){
                    Element e1 = (Element) list.item(j);
                    System.out.println(e1.getNodeName()+"="+e1.getTextContent());
                }
               
            }
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (XPathExpressionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        String strXML="<?xml version=/"1.0/" encoding=/"UTF-8/" standalone=/"no/"?>"+
                    "<root>"+
                        "<TelePhone>"+
                            "<type name=/"nokia/">"+
                                "<price>599</price>"+
                                "<operator>CMCC</operator>"+
                            "</type>"+
                            "<type name=/"xiaomi/">"+
                                "<price>699</price>"+
                                "<operator>ChinaNet</operator>"+
                            "</type>"+
                        "</TelePhone>"+
                    "</root>";
        XMLHandler handler = new XMLHandler();
        handler.parserXML(strXML);
    }

}

PS:這里再為大家提供幾款關于xml操作的在線工具供大家參考使用:

在線XML/JSON互相轉換工具:
http://tools.VeVB.COm/code/xmljson

在線格式化XML/在線壓縮XML:
http://tools.VeVB.COm/code/xmlformat

XML在線壓縮/格式化工具:
http://tools.VeVB.COm/code/xml_format_compress

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美老女人性生活| 美女久久久久久久久久久| 欧美一区二区.| 久久综合亚洲社区| 成人欧美一区二区三区黑人孕妇| 性欧美视频videos6一9| 日韩电影在线观看免费| 91精品美女在线| 亚洲第一天堂无码专区| 91国产视频在线| 日韩在线视频国产| 久久在精品线影院精品国产| 欧美疯狂xxxx大交乱88av| 久久视频国产精品免费视频在线| 欧美日本啪啪无遮挡网站| 国产成人在线一区| 中文字幕日韩综合av| 欧美成人精品一区| 国产精品视频在线播放| 狠狠色狠色综合曰曰| 国产日韩欧美视频| 福利一区视频在线观看| 欧美中文字幕在线播放| 成人免费网站在线| 日韩性生活视频| 欧美另类69精品久久久久9999| 欧美成人h版在线观看| 欧美野外wwwxxx| 亚洲精品日韩激情在线电影| 国产91精品最新在线播放| 亚洲精品一区久久久久久| 日韩激情在线视频| 中文字幕亚洲欧美| 伊人久久免费视频| 久久精品国产一区二区电影| 2019中文字幕全在线观看| 亚洲欧美一区二区三区在线| 亚洲视频电影图片偷拍一区| 欧美黑人视频一区| 91久久精品国产| 日韩av电影国产| 亚洲一级片在线看| 亚洲精品午夜精品| 一区二区中文字幕| 久久久久国色av免费观看性色| 黑人与娇小精品av专区| 久久99热精品这里久久精品| 久久久久久久激情视频| 精品自在线视频| 亚洲激情视频网站| 亚洲激情在线视频| 国产美女高潮久久白浆| 91精品综合久久久久久五月天| 欧美亚洲国产成人精品| 欧美精品videossex88| 亚洲国产欧美一区二区三区同亚洲| 欧美成人手机在线| 久久免费高清视频| 国产精品爽黄69天堂a| 久久久久久久成人| 欧美午夜激情在线| 国产精品毛片a∨一区二区三区|国| 欧美在线视频一区| 亚洲精品国精品久久99热| 欧美成人国产va精品日本一级| 菠萝蜜影院一区二区免费| 日韩av免费网站| 日韩在线免费观看视频| 91高清在线免费观看| 日韩av中文字幕在线免费观看| 欧美韩国理论所午夜片917电影| 国内精品一区二区三区| 中文字幕日韩av电影| 亚洲精品videossex少妇| 黄色成人在线免费| 久久久久国产精品www| 精品视频在线播放色网色视频| 性色av一区二区咪爱| 久久久电影免费观看完整版| 精品国产一区久久久| 久久久久久91| 一本一道久久a久久精品逆3p| 91天堂在线观看| 国产精品久久久久久久久久尿| 亚洲高清av在线| 日韩av电影国产| 国产成人精品a视频一区www| 国产精品视频最多的网站| 日韩av电影在线播放| 日本高清久久天堂| 亚洲成人黄色在线观看| 色哟哟网站入口亚洲精品| 国产精品极品美女在线观看免费| 亚洲国产中文字幕在线观看| 亚洲综合av影视| 国产伦精品一区二区三区精品视频| 91免费在线视频| 久久久久久久一区二区| 成人综合国产精品| 久久久久久久久久久免费| 精品国产精品三级精品av网址| 亚洲免费精彩视频| 国产精品久久久久久久7电影| 欧美激情视频网址| 久久伊人精品视频| 尤物精品国产第一福利三区| 国产美女精品视频| 一区二区欧美日韩视频| 亚洲美女av在线播放| 精品magnet| 久久久久成人网| 97在线视频免费| 国产精品视频最多的网站| 亚洲www在线观看| 久久精品99久久久香蕉| 国产精品户外野外| 亚洲精品电影网| 欧美精品一本久久男人的天堂| 91免费人成网站在线观看18| 国产美女搞久久| 久久久视频在线| 好吊成人免视频| 北条麻妃一区二区三区中文字幕| 成人444kkkk在线观看| 日韩视频永久免费观看| 国产男女猛烈无遮挡91| 日韩亚洲欧美中文高清在线| 国产精品亚洲精品| 少妇精69xxtheporn| 97**国产露脸精品国产| 中文字幕欧美日韩精品| 国内精品久久久久久久| 欧美成人免费在线视频| 欧美激情亚洲自拍| 欧美日韩国产91| 精品国产电影一区| 亚洲成人1234| 欧美亚洲另类激情另类| 亚洲精品福利免费在线观看| 久青草国产97香蕉在线视频| 欧美视频在线免费看| 日韩美女免费观看| 亚洲欧洲在线播放| 日韩专区在线播放| 欧美国产日韩一区二区| 久久久av亚洲男天堂| 国色天香2019中文字幕在线观看| 亚洲精品天天看| 97在线视频免费看| 国产精品高潮呻吟久久av黑人| 最新亚洲国产精品| 国产午夜精品全部视频播放| 久久久久国产精品免费网站| 欧美日韩一二三四五区| 中文字幕亚洲综合| 国产一区二区三区日韩欧美| 国产精品久久综合av爱欲tv| 亚洲激情免费观看| 一区二区三区四区在线观看视频| 久久夜精品va视频免费观看| 亚洲综合中文字幕在线观看| 九九九久久国产免费| 国产精品激情av电影在线观看| 亚洲第一区在线|