XML DOM 遍曆Xml文檔,domxml

來源:互聯網
上載者:User

XML DOM 遍曆Xml文檔,domxml

1.xml文檔內容:

<?xml version="1.0" encoding="utf-8" ?><bookstore> <book category="children"> <title lang="en">Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book> <book category="cooking"> <title lang="en">Everyday Italian</title> <author>Giada De Laurentiis</author> <year>2005</year> <price>30.00</price> </book> <book category="web"> <title lang="en">Learning XML</title> <author>Erik T. Ray</author> <year>2003</year> <price>39.95</price> </book> <book category="web"> <title lang="en">XQuery Kick Start</title> <author>James McGovern</author> <author>Per Bothner</author> <author>Kurt Cagle</author> <author>James Linn</author> <author>Vaidyanathan Nagarajan</author> <year>2003</year> <price>49.99</price> </book></bookstore>XML文檔內容

2.封裝解析xml文檔函數到loadxmldoc.js檔案中

function loadXMLDoc(dname) {try //Internet Explorer  {  xmlDoc=new ActiveXObject("Microsoft.XMLDOM");//建立空的微軟xml文檔對象  }catch(e)  {  try //Firefox, Mozilla, Opera, etc.    {    xmlDoc=document.implementation.createDocument("","",null);//其他瀏覽器通過解析器建立xml文檔對象    }  catch(e) {alert(e.message)}  }try   {  xmlDoc.async=false;//關閉非同步載入,確保文檔載入完之前解析器不會繼續執行指令碼  xmlDoc.load(dname);//載入文檔  return(xmlDoc);//返回xml文檔對象  }catch(e) {alert(e.message)}return(null);}

3.遍曆xml文檔下所有節點

<script type="text/javascript" src="Scripts/loadxmldoc.js">//引入loadxmldoc.js檔案</script><script type="text/javascript">    xmlDoc = loadXMLDoc("books.xml");//建立文檔對象    x = xmlDoc.documentElement.childNodes;//擷取根節點下的子節點    for (i = 0; i < x.length; i++) {        if (1==x[i].nodeType){//是否為元素節點            document.write(x[i].nodeName);//標籤名            document.write("<br/>");            y = x[i].childNodes;//擷取子節點            for (j = 0; j < y.length; j++) {                if (1==y[j].nodeType) {//是元素節點                    document.write(y[j].nodeName);//標籤名                    document.write(":");                    document.write(y[j].childNodes[0].nodeValue);//文本                    document.write("<br/>");                }            }            document.write("<br/>");        }    }</script>

 


把一個XML文檔編寫DOM遍曆,用JAVA解析該文檔對象

做web service這塊,你就不得不跟一堆XML進行打交道,因為我們採用的是Java作為服務的實現,那麼就一定會存在一個問題,那就是JAVA解析XML的問題,其實這是一個大的問題,因為解析做得不好的話,很大程度上影響了效能. 這就是為什麼會有號稱XFire是SOAP棧堆解析最快的架構,其中有一個原因是它使用了stax來解析XML..

下面摘錄些網路上的比較:(詳細的等過幾天看完資料,再寫總結)

1:DOM

DOM 是用與平台和語言無關的方式表示 XML 文檔的官方 W3C 標準。DOM 是以階層組織的節點或資訊片斷的集合。這個階層允許開發人員在樹中尋找特定資訊。分析該結構通常需要載入整個文檔和構造階層,然後才能做任何工作。由於它是基於資訊層次的,因而 DOM 被認為是基於樹或基於對象的。DOM 以及廣義的基於樹的處理具有幾個優點。

首先,由於樹在記憶體中是持久的,因此可以修改它以便應用程式能對資料和結構作出更改。它還可以在任何時候在樹中上下導航,而不是像 SAX 那樣是一次性的處理。DOM 使用起來也要簡單得多。

另一方面,對於特別大的文檔,解析和載入整個文檔可能很慢且很耗資源,因此使用其他手段來處理這樣的資料會更好。這些基於事件的模型,比如 SAX。

2:SAX

這種處理的優點非常類似於流媒體的優點。分析能夠立即開始,而不是等待所有的資料被處理。而且,由於應用程式只是在讀取資料時檢查資料,因此不需要將資料存放區在記憶體中。這對於大型文檔來說是個巨大的優點。事實上,應用程式甚至不必解析整個文檔;它可以在某個條件得到滿足時停止解析。一般來說,SAX 還比它的替代者 DOM 快許多。

3:選擇 DOM 還是選擇 SAX ?

對於需要自己編寫代碼來處理 XML 文檔的開發人員來說,選擇 DOM 還是 SAX 解析模型是一個非常重要的設計決策。

DOM 採用建立樹形結構的方式訪問 XML 文檔,而 SAX 採用的事件模型。

DOM 解析器把 XML 文檔轉化為一個包含其內容的樹,並可以對樹進行遍曆。用 DOM 解析模型的優點是編程容易,開發人員只需要調用建樹的指令,然後利用navigation APIs訪問所需的樹節點來完成任務。可以很容易的添加和修改樹中的元素。然而由於使用 DOM 解析器的時候需要處理整個 XML 文檔,所以對效能和記憶體的要求比較高,尤其是遇到很大的 XML 檔案的時候。由於它的遍曆能力,DOM 解析器常用於 XML 文檔需要頻繁的改變的服務中。

SAX 解析器採用了基於事件的模型,它在解析 XML 文檔的時候可以觸發一系列的事件,當發現給定的tag的時候,它可以啟用一個回調方法,告訴該方法制定的標籤已經找到。SAX 對記憶體的要求通常會比較低,因為它讓開發人員自己來決定所要處理的tag。特別是當開發人員只需要處理文檔中所包含的部分資料時,SAX 這種擴充能力得到了更好的體現。但用 SAX 解析器的時候編碼工作會比較困難,而且很難同時訪問同一個文檔中的多處不同資料。??? 4:JDOM

JDOM的目的是成為 Java 特定文檔模型,它簡化與 XML 的互動並且比使用 DOM 實現更快。由於是第一個 Java 特定模型,JDOM 一直得到大力推廣和促進。正在考慮通過“Java 規範請求 JSR-102”將它最終用作“Java 標準擴充”。從 2000 年初就已經開始了 JDOM 開發。

JDOM 與 DOM 主要有兩方面不同。首......餘下全文>>
 
操作XML文檔,遍曆之後的更改

//供你參考

using System;
using System.Xml;

namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
string xml = @"<nodes>
<abc ip=""192.168.0.1"">143</abc>
<abc ip=""192.168.0.2"">122</abc>
<abc ip=""192.168.0.3"">133</abc></nodes>";

string ip = "192.168.0.11";
string val = "2222";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

XmlNode node = doc.SelectSingleNode("/nodes/abc[@ip='" + ip + "']");
if (node != null)
{
node.InnerText = val;
}
else
{
XmlElement newElement = doc.CreateElement("abc");
XmlAttribute attr = doc.CreateAttribute("ip");
attr.Value = ip;
newElement.Attributes.Append(attr);
newElement.InnerText = val;
doc.DocumentElement.AppendChild(newElement);
}
//new xml
Console.WriteLine(doc.OuterXml);
}
}
}...餘下全文>>
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.