您的位置:首页 > 编程语言 > Java开发

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

2016-07-18 15:50 489 查看
测试: 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.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();//测试写入文件或字符串
}
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: