Dom Sax Pull解析xml

来源:互联网 发布:个人域名备案 编辑:程序博客网 时间:2024/04/30 07:40

import java.io.ByteArrayOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.io.StringWriter;import java.util.Properties;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.parsers.ParserConfigurationException;import javax.xml.transform.OutputKeys;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.DOMException;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import android.R.string;import android.content.Context;public class XmlDom {private final String filename = "DomXml.xml";private Context mContext = null;public XmlDom(Context context) {this.mContext = context;}public String XmlCreate() {String xmlWriter = null;Person[] persons = new Person[3];persons[0] = new Person(1, "facebook", "www.facebook.com");persons[1] = new Person(2, "baidu", "www.baidu.com");persons[2] = new Person(3, "google", "www.google.com");try {DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();Element eRoot = doc.createElement("root");eRoot.setAttribute("author", "homer");  //设置根元素属性eRoot.setAttribute("data", "2012-8-12");doc.appendChild(eRoot);  //将根元素附加到Document对象for (int i = 0; i < persons.length; i++) {Element ePerson = doc.createElement("person");//创建“person”元素eRoot.appendChild(ePerson);Element eId = doc.createElement("id");//创建“id”节点Node nodeId = doc.createTextNode(persons[i].getId() + "");eId.appendChild(nodeId);ePerson.appendChild(eId);//向“person”中添加“id”元素Element eName = doc.createElement("name");Node nodeName = doc.createTextNode(persons[i].getName());eName.appendChild(nodeName);ePerson.appendChild(eName);Element eBlog = doc.createElement("blog");Node nodeBlog = doc.createTextNode(persons[i].getBlog());eBlog.appendChild(nodeBlog);ePerson.appendChild(eBlog);}Properties properties = new Properties();properties.setProperty(OutputKeys.INDENT, "yes");//缩进properties.setProperty(OutputKeys.VERSION, "1.0");//xml版本properties.setProperty(OutputKeys.ENCODING, "utf-8");//文档的编码方式properties.setProperty(OutputKeys.METHOD, "xml");//输出格式properties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");//xml声明//创建一个转换器对象TransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.setOutputProperties(properties);DOMSource domSource = new DOMSource(doc.getDocumentElement());OutputStream output = new ByteArrayOutputStream();StreamResult result = new StreamResult(output);transformer.transform(domSource, result);xmlWriter = output.toString();}catch (ParserConfigurationException e) {e.printStackTrace();}catch (DOMException e) {e.printStackTrace();}catch (TransformerConfigurationException e) {e.printStackTrace();}catch (TransformerException e) {e.printStackTrace();}catch (Exception e) {e.printStackTrace();}saveXml(filename, xmlWriter.toString());return xmlWriter.toString();}//解析xmlpublic String xmlParse() {StringWriter xmlWriter = new StringWriter();InputStream is = readXml(filename);try {DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();Document document = documentBuilder.parse(is);document.getDocumentElement().normalize();NodeList nodeRoot = document.getElementsByTagName("root");Element elementRoot = (Element)nodeRoot.item(0);String attributeAuthor = elementRoot.getAttribute("Author");String attributeDate = elementRoot.getAttribute("Date");xmlWriter.append("root").append("\t");xmlWriter.append(attributeAuthor).append("\t");xmlWriter.append(attributeDate).append("\n");NodeList nodePersion = elementRoot.getElementsByTagName("person");Person[] persons = new Person[nodePersion.getLength()];for (int i = 0; i < persons.length; i++) {Element personElement = (Element)nodePersion.item(i);Person person = new Person();NodeList nlId = personElement.getElementsByTagName("id");Element idElement = (Element)nlId.item(0);String id = idElement.getChildNodes().item(0).getNodeValue();person.setId(Integer.parseInt(id));NodeList nlName = personElement.getElementsByTagName("name");Element nameElement = (Element)nlName.item(0);String name = nameElement.getChildNodes().item(0).getNodeValue();person.setName(name);NodeList nlBlog = personElement.getElementsByTagName("blog");Element blogElement = (Element)nlBlog.item(0);String blog = blogElement.getChildNodes().item(0).getNodeValue();person.setBlog(blog);xmlWriter.append(person.toString()).append("\n");persons[i] = person;}}catch (ParserConfigurationException e) {// TODO: handle exception}catch (IOException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}return xmlWriter.toString();}private void saveXml(String filename, String xml) {FileOutputStream fout =null;try {fout = mContext.openFileOutput(filename, mContext.MODE_PRIVATE);byte []buffer = xml.getBytes();fout.write(buffer);fout.close();}catch (FileNotFoundException e) {// TODO: handle exception}catch (IOException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}}private InputStream readXml(String filename) {FileInputStream fin = null;try {fin = mContext.openFileInput(filename);}catch (FileNotFoundException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}return fin;}}


Sax解析

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.FactoryConfigurationError;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.TransformerFactoryConfigurationError;import javax.xml.transform.sax.SAXTransformerFactory;import javax.xml.transform.sax.TransformerHandler;import javax.xml.transform.stream.StreamResult;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.AttributesImpl;import org.xml.sax.helpers.DefaultHandler;import android.content.Context;public class SaxXml {private final String fileName = "SaxXml.xml";private Context mContext = null;public SaxXml(Context context) {this.mContext = context;}/** Sax方式,创建 XML  */public String saxCreateXML(){StringWriter xmlWriter = new StringWriter();Person []persons = new Person[3];// 创建节点Person对象persons[0] = new Person(1, "facebook", "www.facebook.com");persons[1] = new Person(2, "baidu", "www.baidu.com");persons[2] = new Person(3, "google", "www.google.com");try {SAXTransformerFactory factory = (SAXTransformerFactory)SAXTransformerFactory.newInstance();TransformerHandler handler = factory.newTransformerHandler();//获取能够将 SAX ContentHandler 事件处理为 Result 的 TransformerHandler 对象Transformer transformer = handler.getTransformer();// 用于设置参数和输出属性transformer.setOutputProperty(OutputKeys.INDENT, "yes");//设置转换中实际的输出属性transformer.setOutputProperty(OutputKeys.ENCODING, "utf-8");transformer.setOutputProperty(OutputKeys.VERSION, "1.0");StreamResult result = new StreamResult(xmlWriter);// 保存创建的xmlhandler.setResult(result);handler.startDocument();AttributesImpl attr = new AttributesImpl();attr.clear();attr.addAttribute("", "", "author", "", "homer"); //将属性添加到列表的末尾attr.addAttribute("", "", "date", "", "2012-04-27");handler.startElement("", "", "root", attr);int personsLen = persons.length;for(int i=0; i<personsLen; i++){attr.clear();handler.startElement("", "", "person", attr);attr.clear();handler.startElement("", "", "id", attr);String id = persons[i].getId() + "";handler.characters(id.toCharArray(), 0, id.length());handler.endElement("", "", "id");attr.clear();handler.startElement("", "", "name", attr);String name = persons[i].getName();handler.characters(name.toCharArray(), 0, name.length());handler.endElement("", "", "name");attr.clear();handler.startElement("", "", "blog", attr);String blog = persons[i].getBlog();handler.characters(blog.toCharArray(), 0, blog.length());handler.endElement("", "", "blog");handler.endElement("", "", "person");}handler.endElement("", "", "root");handler.endDocument();} catch (TransformerFactoryConfigurationError e) {// SAXTransformerFactory.newInstancee.printStackTrace();} catch (TransformerConfigurationException e) {// factory.newTransformerHandlere.printStackTrace();} catch (IllegalArgumentException e) {// transformer.setOutputPropertye.printStackTrace();} catch (SAXException e) {// handler.startDocumente.printStackTrace();} catch (Exception e) {e.printStackTrace();}saveXml(fileName, xmlWriter.toString());return xmlWriter.toString();}/** Sax方式,解析 XML  */public String saxResolveXML(){StringWriter xmlWriter = new StringWriter();//一个字符流,可以用其回收在字符串缓冲区中的输出来构造字符串InputStream is = readXml(fileName);try {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();PersonHandler handler = new PersonHandler();// person处理HandlersaxParser.parse(is, handler);// handler解析xml// 获取解析的xmlString xmlHeader = handler.getXMLHeader();xmlWriter.append(xmlHeader);List<Person> personsList = handler.getPersons();int personsLen = personsList.size();for(int i=0; i<personsLen; i++){xmlWriter.append(personsList.get(i).toString()).append("\n");}} catch (FactoryConfigurationError e) {// SAXParserFactory.newInstancee.printStackTrace();} catch (ParserConfigurationException e) {// factory.newSAXParsere.printStackTrace();} catch (SAXException e) {// factory.newSAXParsere.printStackTrace();} catch (IllegalArgumentException e) {// saxParser.parsee.printStackTrace();} catch (IOException e) {// saxParser.parsee.printStackTrace();} catch (Exception e) {e.printStackTrace();}return xmlWriter.toString();}/** Handler处理类 */private final class PersonHandler extends DefaultHandler{private List<Person> personsList = null;// 保存personprivate Person person = null;private StringBuffer xmlHeader;// 保存xml头部信息private String tag = null;// xml Element/** 返回解析的xml头部信息 */public String getXMLHeader(){return xmlHeader.toString();}/** 返回解析的Person实例数组 */public List<Person> getPersons(){return personsList;}@Overridepublic void startDocument() throws SAXException{super.startDocument();personsList = new ArrayList<Person>();xmlHeader = new StringBuffer();}@Overridepublic void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException{super.startElement(uri, localName, qName, attributes);if("root".equals(localName)) {String attrAuthor = attributes.getValue(0);String attrDate = attributes.getValue(1);xmlHeader.append("root").append("\t\t");xmlHeader.append(attrAuthor).append("\t");xmlHeader.append(attrDate).append("\n");} else if("person".equals(localName)) {person = new Person();} tag = localName;}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {super.characters(ch, start, length);if (null != tag) {String value = new String(ch, start, length);System.out.println("value = " + value);if ("id".equals(tag)) {person.setId(new Integer(value));} else if ("name".equals(tag)) {person.setName(value);} else if ("blog".equals(tag)) {person.setBlog(value);}}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if("person".equals(qName)) {personsList.add(person);person = null;}tag = null;super.endElement(uri, localName, qName);}@Overridepublic void endDocument() throws SAXException{//personsList = null;super.endDocument();}}private void saveXml(String fileName, String xml) {FileOutputStream fout =null;try {fout = mContext.openFileOutput(fileName, mContext.MODE_PRIVATE);byte []buffer = xml.getBytes();fout.write(buffer);fout.close();}catch (FileNotFoundException e) {// TODO: handle exception}catch (IOException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}}private InputStream readXml(String fileName) {FileInputStream fin = null;try {fin = mContext.openFileInput(fileName);}catch (FileNotFoundException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}return fin;}}

Pull解析

import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.StringWriter;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import org.xmlpull.v1.XmlSerializer;import wsi.decodeXml.Person;import android.content.Context;public class PullXml {private final String fileName = "SaxXml.xml";private Context mContext = null;public PullXml(Context context) {this.mContext = context;}/** Pull方式,创建 XML  */public String pullXMLCreate(){StringWriter xmlWriter = new StringWriter();Person []persons = new Person[3];// 创建节点Person对象persons[0] = new Person(1, "facebook", "www.facebook.com");persons[1] = new Person(2, "baidu", "www.baidu.com");persons[2] = new Person(3, "google", "www.google.com");try {//// 方式一:使用Android提供的实用工具类android.util.Xml//XmlSerializer xmlSerializer = Xml.newSerializer();// 方式二:使用工厂类XmlPullParserFactory的方式XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlSerializer xmlSerializer = factory.newSerializer();xmlSerializer.setOutput(xmlWriter);// 保存创建的xmlxmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);//xmlSerializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", " ");// 设置属性//xmlSerializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");xmlSerializer.startDocument("utf-8", null);// <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> xmlSerializer.startTag("", "root");xmlSerializer.attribute("", "author", "homer");xmlSerializer.attribute("", "date", "2012-04-28");int personsLen = persons.length;for(int i=0; i<personsLen; i++) {xmlSerializer.startTag("", "person");// 创建person节点xmlSerializer.startTag("", "id");xmlSerializer.text(persons[i].getId()+"");xmlSerializer.endTag("", "id");xmlSerializer.startTag("", "name");xmlSerializer.text(persons[i].getName());xmlSerializer.endTag("", "name");xmlSerializer.startTag("", "blog");xmlSerializer.text(persons[i].getBlog());xmlSerializer.endTag("", "blog");xmlSerializer.endTag("", "person");}xmlSerializer.endTag("", "root");xmlSerializer.endDocument();} catch (XmlPullParserException e) {// XmlPullParserFactory.newInstancee.printStackTrace();} catch (IllegalArgumentException e) {// xmlSerializer.setOutpute.printStackTrace();} catch (IllegalStateException e) {// xmlSerializer.setOutpute.printStackTrace();} catch (IOException e) {// xmlSerializer.setOutpute.printStackTrace();} catch (Exception e) {e.printStackTrace();}saveXml(fileName, xmlWriter.toString());return xmlWriter.toString();}/** Pull方式,解析 XML  */public String pullXMLResolve(){StringWriter xmlWriter = new StringWriter();InputStream is = readXml(fileName);try {//// 方式一:使用Android提供的实用工具类android.util.Xml//XmlPullParser xpp = Xml.newPullParser();// 方式二:使用工厂类XmlPullParserFactory的方式XmlPullParserFactory factory = XmlPullParserFactory.newInstance();XmlPullParser xpp = factory.newPullParser();xpp.setInput(is, "utf-8");List<Person> personsList = null;// 保存xml的person节点Person person = null;StringBuffer xmlHeader = null;// 保存xml头部String ele = null;// Element flagint eventType = xpp.getEventType();while(XmlPullParser.END_DOCUMENT != eventType) {switch (eventType) {case XmlPullParser.START_DOCUMENT:personsList = new ArrayList<Person>();// 初始化personsxmlHeader = new StringBuffer();// 初始化xmlHeaderbreak;case XmlPullParser.START_TAG:if("root".equals(xpp.getName())) {String attrAuthor = xpp.getAttributeValue(0);String attrDate = xpp.getAttributeValue(1);xmlHeader.append("root").append("\t\t");xmlHeader.append(attrAuthor).append("\t");xmlHeader.append(attrDate).append("\n");} else if("person".equals(xpp.getName())) {person = new Person();// 创建person实例} else if("id".equals(xpp.getName())) {ele = "id";} else if("name".equals(xpp.getName())) {ele = "name";} else if("blog".equals(xpp.getName())) {ele = "blog";} else {ele = null;}break;case XmlPullParser.TEXT:if(null != ele) {if("id".equals(ele)) {person.setId(Integer.parseInt(xpp.getText()));} else if("name".equals(ele)) {person.setName(xpp.getText());} else if("blog".equals(ele)) {person.setBlog(xpp.getText());}}break;case XmlPullParser.END_TAG:if("person".equals(xpp.getName())){personsList.add(person);person = null;}ele = null;break;}eventType = xpp.next();// 下一个事件类型}xmlWriter.append(xmlHeader);int personsLen = personsList.size();for(int i=0; i<personsLen; i++) {xmlWriter.append(personsList.get(i).toString());}} catch (XmlPullParserException e) {// XmlPullParserFactory.newInstancee.printStackTrace();} catch (Exception e) {e.printStackTrace();}return xmlWriter.toString();}private void saveXml(String fileName, String xml) {FileOutputStream fout =null;try {fout = mContext.openFileOutput(fileName, mContext.MODE_PRIVATE);byte []buffer = xml.getBytes();fout.write(buffer);fout.close();}catch (FileNotFoundException e) {// TODO: handle exception}catch (IOException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}}private InputStream readXml(String fileName) {FileInputStream fin = null;try {fin = mContext.openFileInput(fileName);}catch (FileNotFoundException e) {// TODO: handle exception}catch (Exception e) {// TODO: handle exception}return fin;}}

参考:http://blog.csdn.net/sunboy_2050/article/details/7516058

http://www.ibm.com/developerworks/cn/xml/x-androidxml/

http://blog.csdn.net/hosterZhu/article/details/6123274

http://blog.csdn.net/sunboy_2050/article/details/7521598

http://blog.csdn.net/sunboy_2050/article/details/7521601

http://www.ibm.com/developerworks/cn/xml/x-android/

http://blog.csdn.net/ichliebephone/article/details/5981913

原创粉丝点击