Java以DOM方式解析生成xml文件或字符串

来源:互联网 发布:淘宝扣分12分会怎么样 编辑:程序博客网 时间:2024/04/30 10:46

测试: kagula

测试日期: 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.htmpublic 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();//测试写入文件或字符串}}


 

 

0 0