Java以DOM方式解析生成xml文件或字符串
2016-07-18 15:50
489 查看
测试: kagula
测试日期: 2016-7-18
测试环境: jdk 1.8.x
book.xml
java源文件
测试日期: 2016-7-18
测试环境: jdk 1.8.x
book.xml
<?xml version="1.0" encoding="ISO-8859-1"?> <bookstore> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <year>2003</year> <price>49.99</price> </book> <book category="web" cover="paperback"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> </bookstore>
java源文件
package testXML; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.PrintWriter; import java.io.StringReader; 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.Attr; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.InputSource; //http://www.jb51.net/article/62995.htm public class testXML { public static void domFromFile() { try{ File xmlFile = new File("d:/book.xml"); DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = builderFactory.newDocumentBuilder(); Document doc = builder.parse(xmlFile); doc.getDocumentElement().normalize(); System.out.println("Root element: "+doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("book"); for(int i = 0 ; i<nList.getLength();i++){ Node node = nList.item(i); System.out.println("Node name: "+ node.getNodeName()); Element ele = (Element)node; System.out.println("----------------------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("book category: "+ ele.getAttribute("category")); System.out.println("title name: "+ ele.getElementsByTagName("title").item(0).getTextContent()); System.out.println("author name: "+ele.getElementsByTagName("author").item(0).getTextContent()); System.out.println("year :" +ele.getElementsByTagName("year").item(0).getTextContent()); System.out.println("price : " +ele.getElementsByTagName("price").item(0).getTextContent()); System.out.println("-------------------------"); } } }catch(Exception ex) { ex.printStackTrace(); } } public static void domFromString() { String strXML = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><bookstore><book category=\"cooking\"> <title lang=\"en\">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book></bookstore>"; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); try { DocumentBuilder builder = factory.newDocumentBuilder(); StringReader sr = new StringReader(strXML); InputSource is = new InputSource(sr); Document doc = builder.parse(is); doc.getDocumentElement().normalize(); System.out.println("Root element: "+doc.getDocumentElement().getNodeName()); NodeList nList = doc.getElementsByTagName("book"); for(int i = 0 ; i<nList.getLength();i++){ Node node = nList.item(i); System.out.println("Node name: "+ node.getNodeName()); Element ele = (Element)node; System.out.println("----------------------------"); if(node.getNodeType() == Element.ELEMENT_NODE){ System.out.println("book category: "+ ele.getAttribute("category")); System.out.println("title name: "+ ele.getElementsByTagName("title").item(0).getTextContent()); System.out.println("author name: "+ele.getElementsByTagName("author").item(0).getTextContent()); System.out.println("year :" +ele.getElementsByTagName("year").item(0).getTextContent()); System.out.println("price : " +ele.getElementsByTagName("price").item(0).getTextContent()); System.out.println("-------------------------"); } } }catch (ParserConfigurationException e) { e.printStackTrace(); } catch(Exception ex) { ex.printStackTrace(); } } public static void dom2file() { DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); try { DocumentBuilder db = dbf.newDocumentBuilder(); Document doc=db.newDocument(); Element eleBookstore=doc.createElement("bookstore"); Element eleBook1=doc.createElement("book"); Element eleBook2=doc.createElement("book"); Attr attr1=doc.createAttribute("颜色"); Attr attr2=doc.createAttribute("颜色"); attr1.setNodeValue("天蓝"); attr2.setNodeValue("橘色"); Element eleName1=doc.createElement("name"); Text nodeName1=doc.createTextNode("龙大哥"); Element eleName2=doc.createElement("name"); Text nodeName2=doc.createTextNode("龙大爷"); Element eleGenre1=doc.createElement("genre"); Text nodeSF=doc.createTextNode("科幻"); Element eleGenre2=doc.createElement("genre"); Text nodeRF=doc.createTextNode("言情"); doc.appendChild(eleBookstore); eleBookstore.appendChild(eleBook1); eleBook1.appendChild(eleName1); eleBook1.setAttributeNode(attr1); eleName1.appendChild(nodeName1); eleBook1.appendChild(eleGenre1); eleGenre1.appendChild(nodeSF); eleBookstore.appendChild(eleBook2); eleBook2.appendChild(eleName2); eleBook2.setAttributeNode(attr2); eleName2.appendChild(nodeName2); eleBook2.appendChild(eleGenre2); eleGenre2.appendChild(nodeRF); // doc2file(doc); //System.out.println(write2string(doc)); } catch (Exception e) { e.printStackTrace(); } } public static void doc2file(Document doc) { try { TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); DOMSource source = new DOMSource(doc); transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); PrintWriter pw = new PrintWriter(new FileOutputStream("d://book2.xml")); StreamResult result = new StreamResult(pw); transformer.transform(source, result); } catch (TransformerConfigurationException e) { System.out.println(e.getMessage()); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } catch (FileNotFoundException e) { System.out.println(e.getMessage()); } catch (TransformerException e) { e.printStackTrace(); } } public static String doc2string(Document doc) { TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = null; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); try{ transformer = tf.newTransformer(); transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.transform(new DOMSource(doc),new StreamResult(outStream)); }catch(Exception e){ e.printStackTrace(); } return outStream.toString(); } public static void main(String[] args) { System.out.println("测试以DOM方式操作xml文件或字符串"); //domFromFile();//测试从磁盘文件中读取 domFromString();//测试从字符串中读取 dom2file();//测试写入文件或字符串 } }
相关文章推荐
- Failed to load the JNI library "E:\JDK6.0\bin\client\jvm.dll"
- Invert Binary Tree
- 关于Spring中的<context:annotation-config/>配置(开启注解)
- java基础总结_03
- Java的抽象类
- Thinking In Java的学习之路 —— Java定制工具库
- mac中java与maven的安装以及环境变量配置
- 【Heritrix 01】Heritrix ecplise下配置安装存在的问题
- JAVA_算法_冒泡排序
- Spring的EL表达式
- 06.Java 基础 - 重载&重写
- Java中判断一个数是整数
- Java 浮点数
- java基础:eclipse编程不得不知道的技巧
- 关于Java框架Vert.x的几点思考
- EXERCISE 21.22 - Thinking In Java(Fourth Edition)Page 107
- Java包名命名规则
- Java多线程基础知识总结
- JRE System Library [JavaSE-1.7](unbound)
- JRE System Library [JavaSE-1.7](unbound)