JAVA生成XML
来源:互联网 发布:虚拟摄像头软件 编辑:程序博客网 时间:2024/06/15 03:31
DOM方式:
package DomTest;import java.io.File;import java.io.IOException;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.Document;import org.w3c.dom.Element;import org.w3c.dom.NamedNodeMap;import org.w3c.dom.Node;import org.w3c.dom.NodeList;import org.xml.sax.SAXException;public class DOMTest { /*** * 生成XML */ public void creatXML(){ DocumentBuilder db=getDocumentBuilder(); Document document=db.newDocument(); document.setXmlStandalone(true);//设置XML的standalone属性 //创建根节点 Element bookstore= document.createElement("bookStore"); //添加子节点book Element book=document.createElement("book"); //添加子节点name Element name=document.createElement("name"); book.appendChild(name); //添加子节点内容 name.setTextContent("人猿泰山"); book.setAttribute("id", "1"); //将book子节点添加到bookstore中 bookstore.appendChild(book); //将bookstore节点(已包含book)添加到dom数中 document.appendChild(bookstore); // TransformerFactory tff=TransformerFactory.newInstance(); try { Transformer tf=tff.newTransformer(); //让DOM树输出过程中正常换行 tf.setOutputProperty(OutputKeys.INDENT, "yes"); tf.transform(new DOMSource(document), new StreamResult(new File("books1.xml"))); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static DocumentBuilder getDocumentBuilder(){ // 创建一个DocumentBuilderFactory对象 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 创建DocumentBuilder对象 DocumentBuilder db=null; try { db = dbf.newDocumentBuilder(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } return db; } public static void main(String[] args) { // 创建一个DocumentBuilder的对象 try { // 通过DocumentBuilder对象的parse方法加载books.xml文件 // 到当前项目下 Document document = getDocumentBuilder().parse("books.xml"); // 获取所有book节点的集合 NodeList bookList = document.getElementsByTagName("book"); //通过nodeList的getLength()方法获取bookLIst的长度 System.out.println("一共有:"+bookList.getLength()+"本书"); //便利各个book节点 for (int i = 0; i < bookList.getLength(); i++) { System.out.println("++++++++++++开始遍历第"+(i+1)+"本书+++++++++++"); //方式一,不知道有多少节点,通过循环来遍历所有节点。 //通过 item(i)获取一个book节点,nodeList Node book=bookList.item(i); //获取book的属性的集合 NamedNodeMap attrs=book.getAttributes(); System.out.println("第"+(i+1)+"本书共有"+attrs.getLength()+"个属性"); //便利book的属性 for (int j = 0; j < attrs.getLength(); j++) { //通过item()方法获取book节点的某一个属性 Node attr=attrs.item(j); //获取属性名 System.out.println("属性名:"+attr.getNodeName()); //获取属性值 System.out.println("属性值:"+attr.getNodeValue()); }// //方式二,知道有且只有一个节点。并且知道属性的名称为“id”// //强制类型转换将book节点类型转换为Element类型// Element book =(Element) bookList.item(i);// // //通过getAttribute(“id”)方法获取到属性的值// String attrValue=book.getAttribute("id");// System.out.println("id的属性的属性值为"+attrValue); //解析book节点的子节点,需要用到方式一中创建的book对象 //获取子节点的集合 NodeList childNodes=book.getChildNodes(); //遍历childNodes获取每个子节点的节点名和节点值 System.out.println("第"+(i+1)+"本书共有"+childNodes.getLength()+"个子节点"); //循环遍历 for (int j = 0; j < childNodes.getLength(); j++) { //区分text类型的node和element类型的node if(childNodes.item(j).getNodeType()==Node.ELEMENT_NODE){ //输出了element类型节点的节点名 System.out.println("第"+(j+1)+"个节点名:"+childNodes.item(j).getNodeName()); //输出element类型节点的节点值 //需先获取当前节点的首个子节点,否则获取的是《name》标签的值NULL //方式一:如果<name>节点下有多个子节点,此方法只输出确定的某个子节点的值 //同样要注意,<name>节点的第一个子节点的值是第一子节点的类型的值,还是NULL System.out.println("节点值为:"+childNodes.item(j).getFirstChild() .getNodeValue()); //方式二:如果<name>节点下有多个子节点,此方法输出所有子节点的text System.out.println(childNodes.item(j).getTextContent()); } } System.out.println("++++++++++++结束遍历第"+(i+1)+"本书++++++++++++"); } } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } DOMTest test=new DOMTest(); test.creatXML(); }}
SAX方式:
使用SAX解析时创建的SAXParserHandler.java
package test;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.util.ArrayList;import javax.xml.parsers.ParserConfigurationException;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import javax.xml.transform.OutputKeys;import javax.xml.transform.Result;import javax.xml.transform.Transformer;import javax.xml.transform.TransformerConfigurationException;import javax.xml.transform.sax.SAXTransformerFactory;import javax.xml.transform.sax.TransformerHandler;import javax.xml.transform.stream.StreamResult;import org.xml.sax.SAXException;import org.xml.sax.helpers.AttributesImpl;import test2.SAXParserHandler;import test3.Book;public class SAXTest { public ArrayList<Book> parseXML(){ // 通过SAXParseFactory的静态newInstance() //方法获取SAXParseFactory实例factory SAXParserFactory factory=SAXParserFactory.newInstance(); SAXParserHandler handler=null; //通过SAXParserFactory实例的newSAXParser() //方法返回SAXParse实例parser try { SAXParser parser= factory.newSAXParser(); //创建SAXParserHandler对象 handler=new SAXParserHandler(); parser.parse("books.xml", handler); System.out.println("书的数量:"+handler.getBookList().size()); for(Book book: handler.getBookList()){ System.out.println(book.getId()); System.out.println(book.getName()); System.out.println(book.getAuthor()); System.out.println(book.getPrice()); System.out.println(book.getYear()); System.out.println("-------------"); } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException | SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } return handler.getBookList(); } public void createXML(){ ArrayList<Book> bookList=parseXML(); //生成XML //1、创建一个TransformFacroty对象 SAXTransformerFactory tff=(SAXTransformerFactory) SAXTransformerFactory.newInstance(); try { //2、通过SAXTransformerFactory对象创建一个TransformerHandler对象 TransformerHandler handler=tff.newTransformerHandler(); //3、通过handler对象创建一个Transformer对象 Transformer tr=handler.getTransformer(); //4、通过Transformer对象对生成的XML文件进行设置 //设置XML编码 tr.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //设置换行 tr.setOutputProperty(OutputKeys.INDENT, "yes"); //5、创建一个Result对象 File f=new File("src/newbooks.xml"); if(!f.exists()){ f.createNewFile(); } Result result=new StreamResult(new FileOutputStream(f)); //6、创建result对象并使其与handler关联 handler.setResult(result); //7、使用handler对象进行XML文件的编写 //打开document handler.startDocument(); AttributesImpl attr=new AttributesImpl(); //开始标签 handler.startElement("", "", "bookstore", attr); for(Book book:bookList){ attr.clear(); attr.addAttribute("", "", "id", "", book.getId()); handler.startElement("", "", "book", attr); attr.clear(); //创建name节点 handler.startElement("", "", "name", attr); handler.characters(book.getName().toCharArray(), 0, book.getName().length()); handler.endElement("", "", "name"); //创建author节点 attr.clear(); handler.startElement("", "", "author", attr); handler.characters(book.getAuthor().toCharArray(), 0, book.getAuthor().length()); handler.endElement("", "", "author"); //创建price节点 attr.clear(); handler.startElement("", "", "price", attr); handler.characters(book.getPrice().toCharArray(), 0, book.getPrice().length()); handler.endElement("", "", "price"); //创建year节点 //判断当有此节点时才进行创建操作 if(book.getYear()!=null&&!book.getYear().trim().equals("")){ attr.clear(); handler.startElement("", "", "year", attr); handler.characters(book.getYear().toCharArray(), 0, book.getYear().length()); handler.endElement("", "", "year"); } handler.endElement("", "", "book"); } //结束标签 handler.endElement("", "", "bookstore"); //关闭document handler.endDocument(); } catch (TransformerConfigurationException | IOException | SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { SAXTest test=new SAXTest(); test.createXML(); }}
DOM4J方式:
RSS就是一个特殊格式的XML
package Dom4jTest;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Iterator;import java.util.List;import org.dom4j.Attribute;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;public class DOM4JTest { public static void main(String[] args) { new DOM4JTest().createXML(); } public void parseXML() { // TODO Auto-generated method stub // 创建SAXReader对象 SAXReader reader = new SAXReader(); // 通过reader对象read 方法加载book.xml try { Document document = reader.read(new File("src/res/books.xml")); // 通过document对象获取根节点bookstore Element bookStore = document.getRootElement(); // 通过element对象的elementIterator方法获取迭代器 Iterator it = bookStore.elementIterator(); // 遍历迭代器,获取根节点中的信息 while (it.hasNext()) { System.out.println("开始遍历一本书"); Element book = (Element) it.next(); // 获取book的属性名和属性值 List<Attribute> bookAttrs = book.attributes(); for (Attribute attr : bookAttrs) { System.out.println("属性名:" + attr.getName() + "\t属性值:" + attr.getValue()); } Iterator itt = book.elementIterator(); while (itt.hasNext()) { Element bookChild = (Element) itt.next(); System.out.println("节点名:" + bookChild.getName() + "\t节点值:" + bookChild.getStringValue()); } System.out.println("结束遍历一本书" + "\n"); } } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void createXML(){ //1、创建Document对象,代表整个XML Document document=DocumentHelper.createDocument(); //2、创建根节点 Element rss=document.addElement("rss"); //3、向rss节点中添加version属性 rss.addAttribute("version", "2.0"); //4、生成子节点及内容 Element channel=rss.addElement("channel"); Element title=channel.addElement("title"); title.setText("新闻资讯"); //设置换行 OutputFormat format=OutputFormat.createPrettyPrint(); format.setEncoding("UTF-8"); //5、生成XML文件 File file=new File("rssnews.xml"); XMLWriter writer; try { writer = new XMLWriter(new FileOutputStream(file),format); //设置是否转义,默认是true进行转义 writer.setEscapeText(false); writer.write(document); writer.close(); } catch (UnsupportedEncodingException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); }catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
JDOM方式:
package test;import java.util.ArrayList;import java.util.List;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import org.jdom2.Attribute;import org.jdom2.Document;import org.jdom2.Element;import org.jdom2.JDOMException;import org.jdom2.input.SAXBuilder;import org.jdom2.output.Format;import org.jdom2.output.XMLOutputter;import test3.Book;public class JDOMTest { private static ArrayList<Book> booksList = new ArrayList<Book>(); public static void main(String[] args) { new JDOMTest().createXML(); } public void parserXML() { // JDOM解析XML文件 // 创建一个SAXBuilder对象 SAXBuilder saxbuilder = new SAXBuilder(); InputStream in; try { // 创建一个输入流,将xml文件加载到流中 in = new FileInputStream("src/res/books.xml"); // InputStreamReader ins=new InputStreamReader(in,"UTF-8"); // 通过saxbuilder的build方法将输入流加载到saxbuilder中 Document document = saxbuilder.build(in); // 通过document对象获取xml文件的根节点 Element rootElement = document.getRootElement(); // 获取根节点下的子节点的集合 List<Element> bookList = rootElement.getChildren(); // 使用foreach循环解析 for (Element book : bookList) { Book bookEntity = new Book(); System.out.println("开始解析第" + (bookList.indexOf(book) + 1) + "本书============"); // 解析book的属性 List<Attribute> attrList = book.getAttributes(); // //知道节点属性名 // book.getAttribute("id"); // 针对不清楚book节点下属性名和数量的情况 // 遍历attrList for (Attribute attr : attrList) { // 获取属性名和属性值 String attrName = attr.getName(); String attrValue = attr.getValue(); System.out.println("属性名:" + attrName + "\t属性值:" + attrValue); // 存储book节点 if (attrName.equals("id")) { bookEntity.setId(attrValue); } } // 对book节点的子节点的节点名和节点值进行遍历 List<Element> bookChilds = book.getChildren(); for (Element child : bookChilds) { System.out.println("节点名:" + child.getName() + "\t节点值:" + child.getValue()); // 存储子节点名 if (child.getName().equals("name")) { bookEntity.setName(child.getValue()); } else if (child.getName().equals("author")) { bookEntity.setAuthor(child.getValue()); } else if (child.getName().equals("year")) { bookEntity.setYear(child.getValue()); } else if (child.getName().equals("price")) { bookEntity.setPrice(child.getValue()); } } System.out.println("结束解析第" + (bookList.indexOf(book) + 1) + "本书============"); // 添加booksList集合对象 booksList.add(bookEntity); bookEntity = null; System.out.println(booksList.size()); System.out.println(booksList.get(0).getId()); System.out.println(booksList.get(0).getName()); } } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (JDOMException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void createXML(){ //1、生成一个根节点 Element rss=new Element("rss"); rss.setAttribute("version","2.0");//添加节点属性 //2、生成一个document对象 Document document=new Document(rss); Element channel=new Element("channel"); rss.addContent(channel); Element title=new Element("title"); title.setText("ceshiceshi测试"); channel.addContent(title); Format format=Format.getCompactFormat(); format.setIndent(""); format.setEncoding("GBK"); //创建XMLOutputter对象 XMLOutputter outputer=new XMLOutputter(format); try { outputer.output(document, new FileOutputStream(new File("rssnews"))); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
生成方式对比
DOM 基于树结构,始终在内存中,方便增删改操作
SAX基于事件
JDOM 基于底层API
DOM4J基于底层API
0 0
- 用Java生成XML
- java生成xml文件
- 用Java生成XML
- java生成xml
- Java生成xml
- 【JAVA】生成XML文件
- JAVA生成XML文件
- java生成xml
- java 生成xml文件
- java 生成XML文档
- java生成xml
- java生成xml文件
- java 生成xml格式文件
- java生成xml文件
- java 生成xml文件
- java生成xml文件
- java生成xml文件
- java生成XML
- 资源收录
- corn表达式
- jquery ajax批量删除
- commons-logging.jar 和 log4j.jar 的关系
- JQuery API 再复习发现的选择器和方法
- JAVA生成XML
- 一个框架10个按钮,嵌套Panel,同时Panel嵌套Panel。GridLayout,BorderLayout,
- 运算符的优先级、结合性、操作数的求值顺序
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
- 总结mysql服务器查询慢原因与解决方法
- github上的免费书籍
- 【BZOJ1056/1862】【排名系统】【hash+treap】
- HAL开发全流程(二)
- PHP 将json的stdClass Object转成数组array