栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 前沿技术 > 人工智能 > NLP

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

NLP 更新时间:发布时间: 百科书网 趣学号
1、基础知识:
Java解析XML一般有四种方法:DOM、SAX、JDOM、DOM4J。

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

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

(2)示例代码:

                        599            CMCC                            699            ChinaNet            
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继承而来的,元素是一个小范围的定义,必须是含有完整信息的结点才是一个元素,例如

...
。但是一个结点不一定是一个元素,而一个元素一定是一个结点。
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/JaxenExceptionat 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 phoneList = root.elements("TelePhone");            List typeList = phoneList.get(0).elements("type");            for (int i=0;i

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(".    public static void main(String[] args) {        // TODO Auto-generated method stub        String strXML=""+                    ""+                        ""+                            ""+                                "599"+                                "CMCC"+                            ""+                            ""+                                "699"+                                "ChinaNet"+                            ""+                        ""+                    "";        XMLHandler handler = new XMLHandler();        handler.parserXML(strXML);    }}

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

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/794939.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号