XML與java的應用

來源:互聯網
上載者:User
文章目錄
  • (1)Document:是整個文檔的根結點。只有取得了Document結點,才能夠對文檔操作。
  • (2)Node:DOM樹是由結點組成,因此結點是很重要的。
  • (3)NodeList:是由Node組成的一個List。
  • Javascript中運用DOM:把html想象成一個DOM樹。

對於XML進行解析,我們需要調用第三方提供的介面,對XML文檔進行解析;

對於XML處理方面,W3C有兩種解決方案:

(1)DOM(Document Object Model):

(2)SAX(Simple API for XML)

DOM介紹:

特點:先將xml文檔解析成dom樹,並放入記憶體,能夠隨機訪問任意節點。

缺點:因為需要放入記憶體操作,所以對檔案大小有限制。

DOM位於org.w3c.dom包中。

一、3個核心的介面: 介面所在包:
import  javax.xml.transform.*;import javax.xml.transform.dom.*;import javax.xml.transform.stream.*;import javax.xml.parsers.*;import org.w3c.dom.*;(1)Document:是整個文檔的根結點。只有取得了Document結點,才能夠對文檔操作。

常用方法:

(1)Element elem = document.createElement("elem");     //建立一個結點

(2)Attribute attr = document.createAttribute("attr");       // 建立一個屬性

(3)Text t = document.createTextNode("text");          //建立一個文本節點

(4)NodeList list = document.getElementsByTagName("...");   //尋找某個結點


(2)Node:DOM樹是由結點組成,因此結點是很重要的。

常用方法:

(1)appendChild(Node child);      //添加子節點

(2)getFirstChild();                 //獲得第一個子節點

(3)getNodeValue();           //得到節點的值

(4)hasChildNodes();         //是否還有子節點

(3)NodeList:是由Node組成的一個List。

常用方法:

(1)Node item(int x);              //獲得第幾個節點

(2)getLength();          // 獲得list的長度

如果要獲得Document對象,需要:

------------------------------------------------------------

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document doc = builder.parse("....");獲得doc

 ------------------------------------------------------------

產生xml檔案方法:需要TransformerFactory,Transformer,StreamResult,DOMSource。

方法:

Document doc = builder.newDocument();

產生DOM樹

StreamResult result = new StreamResult(new File("..."));

DOMSource source = new DOMSource(doc);

TransformerFactory factory  = TransformerFactory.newInstance();

Transformer t = factory.newTransformer();

t.transform(source,result);即可


<?xml version="1.0" encoding="GBK"?><persons><person><name>xiazdong</name><age>20</age><school>ecnu</school></person><person><name>xzdong</name><age>15</age><school>nanyang</school></person></persons>

讀取文檔資訊:

import org.w3c.dom.*;import javax.xml.parsers.*;public class DOMDemo01{public static void main(String args[])throws Exception{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.parse("demo.xml");NodeList plist = doc.getElementsByTagName("person");for(int i=0;i<plist.getLength();i++){Element elem = (Element)plist.item(i);System.out.println("姓名:"+elem.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());System.out.println("年齡:"+elem.getElementsByTagName("age").item(0).getFirstChild().getNodeValue());System.out.println("學校:"+elem.getElementsByTagName("school").item(0).getFirstChild().getNodeValue());}}}

產生XML文檔:

import org.w3c.dom.*;import javax.xml.parsers.*;import javax.xml.transform.*;import javax.xml.transform.dom.*;import javax.xml.transform.stream.*;import java.io.*;public class DOMDemo02{public static void main(String args[])throws Exception{DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document doc = builder.newDocument();Element person = doc.createElement("person");Element age = doc.createElement("age");Element name = doc.createElement("name");Text xiazdong = doc.createTextNode("xiazdong");Text ageText = doc.createTextNode("15");age.appendChild(ageText);name.appendChild(xiazdong);person.appendChild(name);person.appendChild(age);doc.appendChild(person);DOMSource source = new DOMSource(doc);TransformerFactory tf = TransformerFactory.newInstance();Transformer t = tf.newTransformer();StreamResult result = new StreamResult(new File("output.xml"));t.transform(source,result);}}

產生後xml文檔結構:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><person><name>xiazdong</name><age>15</age></person>
SAX介紹:

只能讀取,不能產生或改變,並且只能遍曆。

缺點:只能讀取。

SAX的主要方法有5個:

(1)public void startDocument()throws SAXException;

(2)public void endDocument()throws SAXException;

(3)public void startElement(String uri,String localname,String name,Attribute attr)throws SAXException;

(4)public void endElement(String uri,String localname,String name)throws SAXException;

(5)public void characters(char[]ch , int start,int length)throws SAXException;


SAX屬於觸發類型的,當遇到文檔開頭就觸發(1)方法,遇到元素的開頭觸發(3)方法;

因此如果我們需要使用SAX,必須要自己實現一個SAX解析器;

 注意:解析器必須繼承DefaultHandler;

實現完解析器後,則可以做操作:

SAXParserFactory factory = SAXParserFactory.newInstance();

SAXParser parser = factory.newSAXParser();

parser.parse("檔案路徑",new MySAXParser());


即可;

XML解析工具:

(1)DOM4J

DOM4J是一個XML操作的包,為了提供給使用者更簡便的操作XML。

以下是產生一個XML檔案的代碼:

Document doc = DocumentHelper.createDocument();

Element name = doc.addElement("name");

Element first = name.addElement("firstname");

Element second = name.addElement("secondname");

first.setText("xia");

second.setText("second");

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("gb2312");

XMLWriter writer = new XMLWriter(new FileOutputStream("out.xml"),format);

writer.write(doc);

writer.close();

以下是讀取一個XML檔案的代碼:

SAXReader reader = new SAXReader();

Document doc = reader.read(new File("out.xml"));

Element root = doc.getRootElement();

Iterator iter  = root.elementIterator();

Element elem = (Element)iter.next();

String str = elem.elementText("first");

(2)JDOM:也是一個非常好的解析工具,但是效能上比DOM4J差了不少,所以不用。

Javascript中運用DOM:把html想象成一個DOM樹。

這裡通過id進行尋找。

var elem = document.getElementById("id");

elem.innerHTML

產生一個<input type = "button" value = "button"/>過程:

var form = document.getElementById("form");            //獲得表單節點

Element button = document.createElement("input");        //建立一個節點

button.setAttribute("type","button");        //設定屬性

button.setAttribute("value","button");    //設定屬性

form.appendChild(button);        //添加form的子節點

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.