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

高洛峰
Freigeben: 2017-01-11 12:39:13
Original
1605 Leute haben es durchsucht

1、基础知识:
Java解析XML一般有四种方法:DOM、SAX、JDOM、DOM4J。

2、使用介绍
1)、DOM
(1)简介

由W3C(org.w3c.dom)提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作。优点就是整个文档都一直在内存中,我们可以随时访问任何节点,并且对树的遍历也是比较熟悉的操作;缺点则是耗内存,并且必须等到所有的文档都读入内存才能进行处理。

(2)示例代码:

    599 CMCC   699 ChinaNet   
Nach dem Login kopieren
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); } }
Nach dem Login kopieren

(3)元素(Element)和结点(Node)的区别(org.w3c.dom)
Node对象是整个文档对象模型的主要数据类型,是DOM中最基本的对象,代表了文档树中的抽象节点。但在实际使用中很少会直接使用Node对象,而是使用Node对象的子对象Element,Attr,Text等。
Element对象表示HTML或XML文档中的一个元素,是Node类最主要的子对象,在元素中可以包含属性,因而Element中有存取其属性的方法。
Element是从Node继承而来的,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如

...
。但是一个结点不一定是一个元素,而一个元素一定是一个结点。
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)
Nach dem Login kopieren

(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 phoneList = root.elements("TelePhone"); List typeList = phoneList.get(0).elements("type"); for (int i=0;i
        
Nach dem Login kopieren

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"+ ""+ ""+ ""+ "599"+ "CMCC"+ ""+ ""+ "699"+ "ChinaNet"+ ""+ ""+ ""; XMLHandler handler = new XMLHandler(); handler.parserXML(strXML); } }
Nach dem Login kopieren

更多Java生成和解析XML格式文件和字符串的实例代码相关文章请关注PHP中文网!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!