DOM-讀取數(shù)據(jù)庫,將數(shù)據(jù)寫入XML,解析XML..
數(shù)據(jù)的讀取
將數(shù)據(jù)從數(shù)據(jù)庫中讀取,并寫入XML。代碼如下:
package com.mky.xml;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.apache.crimson.tree.XmlDocument;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class WriteXml {
static Connection conn = null;
static String sql;
static String url = "jdbc:oracle:thin:@localhost:1521:zxg";
public static void main(String[] args) {
? try {
?? Class.forName("oracle.jdbc.driver.OracleDriver");
?? conn = DriverManager.getConnection(url, "scott", "tiger");
?? Statement st = conn.createStatement();
?? ResultSet rs = st.executeQuery("select * from dept");
?? DocumentBuilderFactory factory = DocumentBuilderFactory
???? .newInstance();
?? DocumentBuilder builder = factory.newDocumentBuilder();
?? Document doc = builder.newDocument();
?? Element comp = doc.createElement("COMP");
?? while (rs.next()) {
??? Element person = doc.createElement("PERSON");
??? Element deptno = doc.createElement("DEPTNO");
??? deptno.appendChild(doc.createTextNode(String.valueOf(rs
????? .getInt(1))));
??? person.appendChild(deptno);
??? Element dname = doc.createElement("DNAME");
??? dname.appendChild(doc.createTextNode(rs.getString(2)));
??? person.appendChild(dname);
??? Element loc = doc.createElement("LOC");
??? loc.appendChild(doc.createTextNode(rs.getString(3)));
??? person.appendChild(loc);
??? comp.appendChild(person);
?? }
?? rs.close();
?? st.close();
?? conn.close();
?? doc.appendChild(comp);
?? ((XmlDocument) doc)
???? .write(new FileOutputStream(new File("dept.xml")));
?? System.out.println("從數(shù)據(jù)庫讀出數(shù)據(jù),寫入xml ..操作成功!!!");
? } catch (ClassNotFoundException e) {
?? e.printStackTrace();
? } catch (SQLException e1) {
?? e1.printStackTrace();
? } catch (ParserConfigurationException e2) {
?? e2.printStackTrace();
? } catch (FileNotFoundException e3) {
?? e3.printStackTrace();
? } catch (IOException e4) {
?? e4.printStackTrace();
? }
}
}
生成dept.xml? 內(nèi)容如下:
<?xml version="1.0" encoding="UTF-8"?>
<COMP>
? <PERSON>
??? <DEPTNO>10</DEPTNO>
??? <DNAME>ACCOUNTING</DNAME>
??? <LOC>NEW YORK</LOC>
? </PERSON>
? <PERSON>
??? <DEPTNO>20</DEPTNO>
??? <DNAME>RESEARCH</DNAME>
??? <LOC>DALLAS</LOC>
? </PERSON>
? <PERSON>
??? <DEPTNO>30</DEPTNO>
??? <DNAME>SALES</DNAME>
??? <LOC>CHICAGO</LOC>
? </PERSON>
? <PERSON>
??? <DEPTNO>40</DEPTNO>
??? <DNAME>OPERATIONS</DNAME>
??? <LOC>BOSTON</LOC>
? </PERSON>
</COMP>
從生成的XML中讀取數(shù)據(jù)。代碼如下:
package com.mky.xml;
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class ReadXML {
public static void main(String[] args) {
? try {
?? DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory
???? .newInstance();
?? DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();
?? Document doc = docBuilder.parse(new File("dept.xml"));
?? doc.getDocumentElement().normalize();
?? System.out.println("Root element of the doc is "
???? + doc.getDocumentElement().getNodeName());
?? NodeList listOfPersons = doc.getElementsByTagName("PERSON");
?? int totalPersons = listOfPersons.getLength();
?? System.out.println("Total NO of people : " + totalPersons);
?? for (int s = 0; s < listOfPersons.getLength(); s++) {
??? Node firstPersonNode = listOfPersons.item(s);
??? if (firstPersonNode.getNodeType() == Node.ELEMENT_NODE) {
???? Element firstPersonElement = (Element) firstPersonNode;
???? // -------
???? NodeList firstNameList = firstPersonElement
?????? .getElementsByTagName("DEPTNO");
???? Element firstNameElement = (Element) firstNameList.item(0);
???? NodeList textFNList = firstNameElement.getChildNodes();
???? System.out
?????? .println("DEPTNO Name : "
???????? + ((Node) textFNList.item(0))
?????????? .getNodeValue().trim());
???? // -------
???? NodeList lastNameList = firstPersonElement
?????? .getElementsByTagName("DNAME");
???? Element lastNameElement = (Element) lastNameList.item(0);
???? NodeList textLNList = lastNameElement.getChildNodes();
???? System.out
?????? .println("DNAME Name : "
???????? + ((Node) textLNList.item(0))
?????????? .getNodeValue().trim());
???? // ----
???? NodeList ageList = firstPersonElement
?????? .getElementsByTagName("LOC");
???? Element ageElement = (Element) ageList.item(0);
???? NodeList textAgeList = ageElement.getChildNodes();
???? System.out.println("LOC : "
?????? + ((Node) textAgeList.item(0)).getNodeValue()
???????? .trim());
??? }
?? }
? } catch (SAXParseException err) {
?? System.out.println("** Parsing error" + ", line "
???? + err.getLineNumber() + ", uri " + err.getSystemId());
?? System.out.println(" " + err.getMessage());
? } catch (SAXException e) {
?? Exception x = e.getException();
?? ((x == null) ? e : x).printStackTrace();
? } catch (Throwable t) {
?? t.printStackTrace();
? }
}
}
讀取結(jié)果:
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
