導航:首頁 > 編程語言 > javaxmldocument

javaxmldocument

發布時間:2024-06-14 02:40:43

java解析xml的幾種方式哪種最好

(1)DOM解析
DOM是html和xml的應用程序介面(API),以層次結構(類似於樹型)來組織節點和信息片段,映射XML文檔的結構,允許獲取
和操作文檔的任意部分,是W3C的官方標准
【優點】
①允許應用程序對數據和結構做出更改。
②訪問是雙向的,可以在任何時候在樹中上下導航,獲取和操作任意部分的數據。
【缺點】
①通常需要載入整個XML文檔來構造層次結構,消耗資源大。
【解析詳解】
①構建Document對象:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = bdf.newDocumentBuilder();
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(xml文件);
Document doc = bd.parse(is);
②遍歷DOM對象
Document: XML文檔對象,由解析器獲取
NodeList: 節點數組
Node: 節點(包括element、#text)
Element: 元素,可用於獲取屬性參數
(2)SAX(Simple API for XML)解析
流模型中的"推"模型分析方式。通過事件驅動,每發現一個節點就引發一個事件,事件推給事件處理器,通過回調方法
完成解析工作,解析XML文檔的邏輯需要應用程序完成
【優勢】
①不需要等待所有數據都被處理,分析就能立即開始。
②只在讀取數據時檢查數據,不需要保存在內存中。
③可以在某個條件得到滿足時停止解析,不必解析整個文檔。
④效率和性能較高,能解析大於系統內存的文檔。
【缺點】
①需要應用程序自己負責TAG的處理邏輯(例如維護父/子關系等),文檔越復雜程序就越復雜。
②單向導航,無法定位文檔層次,很難同時訪問同一文檔的不同部分數據,不支持XPath。
【原理】
簡單的說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束時通知事件
處理函數(回調函數),進行相應處理,直到文檔結束
【事件處理器類型】
①訪問XML DTD:DTDHandler
②低級訪問解析錯誤:ErrorHandler
③訪問文檔內容:ContextHandler
【DefaultHandler類】
SAX事件處理程序的默認基類,實現了DTDHandler、ErrorHandler、ContextHandler和EntityResolver介面,通常
做法是,繼承該基類,重寫需要的方法,如startDocument()
【創建SAX解析器】
SAXParserFactory saxf = SAXParserFactory.newInstance();
SAXParser sax = saxf.newSAXParser();
註:關於遍歷
①深度優先遍歷(Depthi-First Traserval)
②廣度優先遍歷(Width-First Traserval)
(3)JDOM(Java-based Document Object Model)
Java特定的文檔對象模型。自身不包含解析器,使用SAX
【優點】
①使用具體類而不是介面,簡化了DOM的API。
②大量使用了Java集合類,方便了Java開發人員。
【缺點】
①沒有較好的靈活性。
②性能較差。
(4)DOM4J(Document Object Model for Java)
簡單易用,採用Java集合框架,並完全支持DOM、SAX和JAXP
【優點】
①大量使用了Java集合類,方便Java開發人員,同時提供一些提高性能的替代方法。
②支持XPath。
③有很好的性能。
【缺點】
①大量使用了介面,API較為復雜。
(5)StAX(Streaming API for XML)
流模型中的拉模型分析方式。提供基於指針和基於迭代器兩種方式的支持,JDK1.6新特性
【和推式解析相比的優點】
①在拉式解析中,事件是由解析應用產生的,因此拉式解析中向客戶端提供的是解析規則,而不是解析器。
②同推式解析相比,拉式解析的代碼更簡單,而且不用那麼多庫。
③拉式解析客戶端能夠一次讀取多個XML文件。
④拉式解析允許你過濾XML文件和跳過解析事件。
【簡介】
StAX API的實現是使用了Java Web服務開發(JWSDP)1.6,並結合了Sun Java流式XML分析器(SJSXP)-它位於
javax.xml.stream包中。XMLStreamReader介面用於分析一個XML文檔,而XMLStreamWriter介面用於生成一個
XML文檔。XMLEventReader負責使用一個對象事件迭代子分析XML事件-這與XMLStreamReader所使用的游標機制
形成對照。

❷ java解析xml文件

SaxReader reader = new SaxReader();
Document doc = reader.read(new File("class.xml"));
Element element = doc.getRootElement();//獲取根元素

迭代器:取根元素下的子元素名稱
Iterator<Element> iter = element.elementIterator();
while(iter.hashNext){
Element el = (Element)iter.next();
el.getName();//獲取元素名稱
el.getText();//獲取元素值
}

//獲取屬性名稱、值
Iterator<Attribute> iter1 = element.attributeIterator();
while(iter1.hashNext()){
Attribute el = (Attribute)iter1.next();
el.getName();el.getValue();//獲取屬性名稱和值
}

如果取所有,則用遞歸取:
public void getInfo(Element root){
Iterator<Element> iter = root.getElementIterator();
while(iter.hashNext()){
Element element = (Element)iter.next();
getInfo(element);//自己調用自己 遞歸方法
}
}

❸ java 關於讀取xml文件的問題

用dom4j

dom4j 需要一個jar包 網上有下載 一搜很多的。

1.讀取XML文件,獲得document對象。

SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));

2.解析XML形式的文本,得到document對象。

String text = "<members></members>";
Document document = DocumentHelper.parseText(text);

3.主動創建document對象。

Document document = DocumentHelper.createDocument();
Element root = document.addElement("members");// 創建根節點

二、節點相關

1.獲取文檔的根節點。

Element rootElm = document.getRootElement();

2.取得某節點的單個子節點。

Element memberElm=root.element("member");// "member"是節點名

3.取得節點的文字

String text=memberElm.getText();也可以用:
String text=root.elementText("name");這個是取得根節點下的name位元組點的文字

4.取得某節點下名為"member"的所有位元組點並進行遍歷

List nodes = rootElm.elements("member");

for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}

5.對某節點下的所有子節點進行遍歷。

for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}

6.在某節點下添加子節點。

Element ageElm = newMemberElm.addElement("age");

7.設置節點文字。

ageElm.setText("29");

8.刪除某節點。

parentElm.remove(childElm);// childElm是待刪除的節點,parentElm是其父節點

三、屬性相關。

1.取得某節點下的某屬性

Element root=document.getRootElement();
Attribute attribute=root.attribute("size");// 屬性名name

2.取得屬性的文字

String text=attribute.getText();也可以用:
String text2=root.element("name").attributeValue("firstname");這個是取得根節點下name位元組點的屬性firstname的值

3.遍歷某節點的所有屬性

Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}

4.設置某節點的屬性和文字。

newMemberElm.addAttribute("name", "sitinspring");

5.設置屬性的文字

Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");

6.刪除某屬性

Attribute attribute=root.attribute("size");// 屬性名name
root.remove(attribute);

❹ java中xml的Document對象怎麼轉成String形式

/***
* 將Document對象轉換成String
* @param document
* @return
*/
public String transformXMLToString(Document document) {
try {
XMLOutputter xmlout = new XMLOutputter();
Format tFormat = Format.getPrettyFormat();
tFormat.setEncoding("GBK");
xmlout.setFormat(tFormat);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
xmlout.output(document, bo);
String xmlStr = bo.toString();
bo.flush();
bo.close();
return xmlStr;
} catch (Exception e) {
LogUtil.getLogger().error(LogUtil.getExceptionDetail(e));
return null;
}
}

❺ java中xml的Document對象怎麼轉成String形式

/***
* 將Document對象轉換成String
* @param document
* @return
*/
public String transformXMLToString(Document document) {
try {
XMLOutputter xmlout = new XMLOutputter();
Format tFormat = Format.getPrettyFormat();
tFormat.setEncoding("GBK");
xmlout.setFormat(tFormat);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
xmlout.output(document, bo);
String xmlStr = bo.toString();
bo.flush();
bo.close();
return xmlStr;
} catch (Exception e) {
LogUtil.getLogger().error(LogUtil.getExceptionDetail(e));
return null;
}
}

❻ 如何用java語言生成xml文件,並將它返回

實例:
holen.xml

<?xml version="1.0" encoding="UTF-8"?>

<books>

<!--This is a test for dom4j, holen, 2004.9.11-->

<book show="yes">

<title>Dom4j Tutorials</title>

</book>

<book show="yes">

<title>Lucene Studing</title>

</book>

<book show="no">

<title>Lucene in Action</title>

</book>

<owner>O'Reilly</owner>

</books>

建立一個XML文檔:

/**

* 建立一個XML文檔,文檔名由輸入屬性決定

* @param filename 需建立的文件名

* @return 返回操作結果, 0表失敗, 1表成功

*/

public int createXMLFile(String filename){

/** 返回操作結果, 0表失敗, 1表成功 */

int returnValue = 0;

/** 建立document對象 */

Document document = DocumentHelper.createDocument();

/** 建立XML文檔的根books */

Element booksElement = document.addElement("books");

/** 加入一行注釋 */

booksElement.addComment("This is a test for dom4j, holen, 2004.9.11");

/** 加入第一個book節點 */

Element bookElement = booksElement.addElement("book");

/** 加入show屬性內容 */

bookElement.addAttribute("show","yes");

/** 加入title節點 */

Element titleElement = bookElement.addElement("title");

/** 為title設置內容 */

titleElement.setText("Dom4j Tutorials");

/** 類似的完成後兩個book */

bookElement = booksElement.addElement("book");

bookElement.addAttribute("show","yes");

titleElement = bookElement.addElement("title");

titleElement.setText("Lucene Studing");

bookElement = booksElement.addElement("book");

bookElement.addAttribute("show","no");

titleElement = bookElement.addElement("title");

titleElement.setText("Lucene in Action");

/** 加入owner節點 */

Element ownerElement = booksElement.addElement("owner");

ownerElement.setText("O'Reilly");

try{

/** 將document中的內容寫入文件中 */

XMLWriter writer = new XMLWriter(new FileWriter(new File(filename)));

writer.write(document);

writer.close();

/** 執行成功,需返回1 */

returnValue = 1;

}catch(Exception ex){

ex.printStackTrace();

}

return returnValue;

}

說明:

Document document = DocumentHelper.createDocument();

通過這句定義一個XML文檔對象。

Element booksElement = document.addElement("books");

通過這句定義一個XML元素,這里添加的是根節點。

Element有幾個重要的方法:

l addComment:添加註釋

l addAttribute:添加屬性

l addElement:添加子元素

閱讀全文

與javaxmldocument相關的資料

熱點內容
驚變1小時8分鍾才是經典 瀏覽:722
ps如何pdf製作 瀏覽:780
如何按照序號排列文件夾 瀏覽:431
演算法設計與分析基礎網盤 瀏覽:710
linux信號量的使用 瀏覽:59
朴初炫演過的電影 瀏覽:967
掌閱下的書在哪個文件夾 瀏覽:849
程序員學python難嗎 瀏覽:735
源泉插件圖紙加密 瀏覽:607
minitab編程 瀏覽:229
網頁編程語言大全 瀏覽:631
單片機鋰離子 瀏覽:7
單片機交流電流測量 瀏覽:715
小雞模擬器ios游戲一直正在解壓 瀏覽:926
可以把文件夾轉化為文檔的軟體 瀏覽:954
微軟認證高級程序員 瀏覽:885
人工智慧網路演算法工程師 瀏覽:459
白色邊框app是什麼 瀏覽:740
日本愛情尺寸度電影推薦 瀏覽:935
國內女人偷情片 瀏覽:287