當前位置:首頁 » 安卓系統 » android解析dom

android解析dom

發布時間: 2022-09-12 04:42:00

『壹』 Android 通過DOM方式解析xml文件為doc,然後對節點的屬性值進行修改,修改完了怎麼保存回去啊

private void writer(Document document)
throws ,
, TransformerException {
TransformerFactory transformerFactory = TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer();
Source xmlSource = new DOMSource(document);
Result outputTarget = new StreamResult(new File("F:\\javaweb20120208_workspace\\day3\\orders.xml"));//xm文件所在位置 transformer.transform(xmlSource, outputTarget);//提交覆蓋原來的xml

}

『貳』 寫給Android開發者看的『微信小程序和Android開發的對比』

微信小程序近期可謂是動作頻出,僅最近新增的能力就有:

種種跡象表明,微信對小程序的期望值是很大,所以在它推出的幾個月效果沒到達預期的情況下,之前的很多『克制』也就逐漸變成『放肆』了 —— 不過不管小程序以後的發展到底怎樣,對我們開發者來發,多了解一些總是沒有壞處的。

他山之石,可以攻玉。
對於是技術人來說,多了解一些不同的技術、不同的開發模式、不同的架構思想,提高技術『廣度』,對於自己的成長是十分必要的。
所以,本文就是從一個 Android 開發者的角度,從項目工程方便切入,來分析一下『微信小程序』跟『Android App』開發上的一些異同。
『微信小程序』開發是一個相對較新的技術,希望通過本文,能讓你對它多一些了解。

因為內容是從Android開發的角度來談的,所以我假設你已經對 Android 開發比較熟悉了。並且對微信小程序的開發也比較感興趣,如果要是再能有些 javascript、css 的基礎的話那就更好了!

Android 開發我們已經比較熟悉——

作為對比,進行微信小程序開發所用的語言是這些——

wxml (WeiXin Markup Language) 基本約等於是 xml。微信之所以沒有直接使用 xml ,可能是為了以後擴展方便一些(野心很大)。
同理, wxss (WeiXin Style Sheets) 基本約等於是 css。也是微信擴展了一些功能,比如統一的尺寸單位 rpx 。

對於 Android 來說,對於頁面的描述基本上在 xml 中定義的,比如:

這是一個簡單的典型的示例,這個文件就是描述了兩部分內容:

some.wxss:

很明顯可以看出:wxml 是負責了 頁面結構 的展示;而 wxss 則負責了對 頁面樣式 的定義。
這種把結構和樣式分離的做法,其實是延續了網頁開發中的習慣(html + css)。
這樣做的好處起碼有兩個:

——看起來還是挺簡單的結構:

這三個文件用以描述小程序 app 相關的內容,他們的命名是固定這樣的,位置也固定是在根目錄下。

app.js 基本相當於 Android 中的 Application 類,文件中主要是有一個 App() 函數,來進行小程序的初始化操作。

app.json 的作用跟 Android 中的 AndroidMainifest.xml 文件很相似 —— 都是靜態化的配置文件。

app.wxss 定義全局的樣式 —— 其定義的樣式會作用於每個頁面。比如在 app.wxss 中加入:

就可以給所有的 text 控制項添加 5px 的 padding 。
當然,頁面本身的 xxPage.wxss 可以定義局部樣式來覆蓋全局樣式。

根目錄下的 utils 文件夾中有一個 util.js 文件,這個故名思意,是類似於 Java 中的一些工具類的存在。
utils 文件夾其實是一個非必須的結構,而它之所以出現在官方的 HelloWorld 工程中,是作為一個代表,表明了開發者在這里是可以自定義新的文件夾和結構的。微信小程序作為一個使用 js 來開發的平台,是可以使用許多第三方的 js 庫的,對於這些第三方庫,以及其他的圖片資源等,都可以放到自定義的文件夾中。

pages 文件夾下包含兩個子目錄:index 和 logs ,兩個目錄的結構都是基本一樣的,都是包含四個相同主名稱的文件: xx.js、xx.wxml、xx.json、xx.wxss 這幾個文件。
這樣的一個典型結構表明它是一個小程序的頁面,四個文件的作用分別是:

在視圖的動態顯示上,微信小程序使用了 數據綁定(data-binding) 的方式。
如果你之前使用過 AngularJS 或者 Vue.js 等這些流行的 js 框架,那麼你肯定對 數據綁定 並不陌生。它是一種把一個控制項的屬性綁定到某個數據對象(view-model)的屬性的方法,這樣在改變數據對象屬性的時候,所對應的控制項屬性也就會相應變化 —— 在開發中,這種方式會使得對 View 層的顯示控制變得十分簡單、自然。
基於此,軟體工程的流行架構方式也在之前的 MVC 、 MVP 之外,又多了一個 —— MVVM(Model-View-ViewModel) 。
數據綁定 這種方式現在是如此的流行,以致於 Android 官方都出了一個 [Data Binding Library] ( https://developer.android.com/topic/libraries/data-binding/index.html ) 來支持數據綁定,但是由於成熟度等原因,目前還並沒有成為主流,Android 中的主流視圖顯示方式,還是通過開發者手動給每個控制項 set 數據。
—— 單從這一點上看,微信小程序的開發模式是比原生 Andorid 要『先進』一些的~ 😏

小程序雖然是和前端 H5 頁面一樣是用 js 來開發,但是由於它最終運行的平台不再是瀏覽器,而是和 App 的表現幾無二致,所以頁面的生命周期也是和 App 差不多的。

一個小程序頁面的典型生命周期如下:

對比一下 Android 的 Activity 生命周期 :

微信小程序的頁面生命周期稍微簡單一些,但主要的思想跟 Activity 生命周期基本是一致的。

小程序的官方 IDE 是微信自己出品 微信Web開發者工具 ,它內置了一個小程序的運行環境,本質上是基於 Chrome 內核的一個瀏覽器框架,算是一個模擬器了。
——它雖然跟 Android 的各種高大上的模擬器相比起來略顯簡陋,但是基本該有的功能也基本都有(斷點、Log、網路監控等),而且由於是基於瀏覽器內核的頁面 DOM 解析,所以運行的速度也是像瀏覽器打開網頁一樣流暢,不會像 Android 模擬器那樣對系統資源要求很高。
另外,在綁定了開發者賬號之後,也可以用手機進行真機調試來調試小程序,所以也能在上線前用不同的機器來進行充分的兼容性測試。

總體來說,小程序作為一個新的形態,從開發的角度,它可以算作是一個【Native開發】和【H5開發】的結合,它吸收了原生開發和 H5 開發的優點。對於前端開發人員和原生開發人員來說,都可以在微信小程序中找到許多熟悉的東西。再細節的許多點這里就不在贅述了,大家如果有興趣,可以自己上手去體驗一下。

綜上,自然也就有兩種人特別適合去做小程序的開發——H5的前端開發人員,以及之前的 Android/iOS 原生 App 開發者。

微信小程序的開發總體來說是很簡單的。
—— 對於前端開發者來說,了解一下原生 App 的一些相關思想即可,這些工作其實只要讀一遍小程序的開發者指南基本就差不多了。
—— 而對於原生開發者來說,只要稍微補一下 js 的相關知識(html/css),也基本就差不多可以上手去做了。如果你之前恰好已經有過一些 js 的使用經驗,那就不用多說了,花半個小時看一下小程序的文檔,直接上!

關於作者 :
http://www.barryzhang.com
https://github.com/barryhappy
http://www.jianshu.com/users/e4607fd59d0d

『叄』 學android要會dom解析嗎

DOM解析跟你學不學android沒關系。
在你程序需要用到XML的時候,你都要知道怎麼去解析,這是一個知識點,各平台都可能用得到。
學會了,對你肯定是有好處的。

『肆』 Android 中有哪幾種解析 xml 的類,官方推薦哪種

在Android中提供了三種解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推薦的Pull解析方式.下面就對三種解析方式一一詳細闡述。

首先介紹SAX解析,SAX是事件驅動型XML解析的一個標准介面不會改變 SAX的工作原理簡單地說就是對文檔進行順序掃描,當掃描到文檔(document)開始與結束、元素(element)開始與結束、文檔(document)結束等地方時通知事件處理函數,由事件處理函數做相應動作,然後繼續同樣的掃描,直至文檔結束

下面介紹DOM解析,DOM,即對象文檔模型,它是將整個XML文檔載入內存(所以效率較低,不推薦使用),每一個節點當做一個對象

下面介紹Pull解析,是Android推薦使用,更適合移動設備,以下代碼講解
public class PulPersonService {
public List<Person> getPersons(InputStream instream) throws Exception {
List<Person> persons = null;
Person person = null;
XmlPullParser parser = Xml.newPullParser();//得到Pull解析器
parser.setInput(instream, "UTF-8");//設置下輸入流的編碼
int eventType = parser.getEventType();//得到第一個事件類型
while (eventType != XmlPullParser.END_DOCUMENT) {//如果事件類型不是文檔結束的話則不斷處理事件
switch (eventType) {
case (XmlPullParser.START_DOCUMENT)://如果是文檔開始事件
persons = new ArrayList<Person>();創建一個person集合
break;
case (XmlPullParser.START_TAG)://如果遇到標簽開始
String tagName = parser.getName();// 獲得解析器當前元素的名稱
if ("person".equals(tagName)) {//如果當前標簽名稱是<person>
person = new Person();//創建一個person
person.setId(new Integer(parser.getAttributeValue(0)));//將元素的屬性值賦值給id
}
if (person != null) {//如果person已經創建完成
if ("name".equals(tagName))//如果當前節點標記是name
person.setName(new String(parser.nextText()));
else if ("age".equals(tagName))//如果當前元素節點標記是age
person.setAge(new Short(parser.nextText()));
}
break;
case (XmlPullParser.END_TAG)://如果遇到標簽結束
if ("person".equals(parser.getName())) {//如果是person標簽結束
persons.add(person);//將創建完成的person加入集合
person = null;//並且置空
}
break;
}
eventType=parser.next();//進入下一個事件處理
}
return persons;
}

『伍』 android用dom解析xml效率怎麼樣

dom小的文件可以 他把文件全部載入到手機 再進行解析 大文件的話用SAX 或者pull解析 他們是事件驅動邊載入邊解析 而且SAX有重載的方法 簡單 好用

『陸』 android中使用哪種方式解析XML比較好

PULL解析器,因為SAX解析器操作起來太笨重,DOM不適合文檔較大,內存較小的場景,唯有PULL輕巧靈活,速度快,佔用內存小,使用非常順手。
在Android中,常見的XML解析器分別為SAX解析器、DOM解析器和PULL解析器,下面一一詳細介紹。
1、SAX解析器:
SAX(Simple
API
for
XML)解析器是一種基於事件的解析器,它的核心是事件處理模式,主要是圍繞著事件源以及事件處理器來工作的。當事件源產生事件後,調用事件處理器相應的處理方法,一個事件就可以得到處理。在事件源調用事件處理器中特定方法的時候,還要傳遞給事件處理器相應事件的狀態信息,這樣事件處理器才能夠根據提供的事件信息來決定自己的行為。
SAX解析器的優點是解析速度快,佔用內存少。非常適合在Android移動設備中使用。
2、DOM解析器:
DOM是基於樹形結構的的節點或信息片段的集合,允許開發人員使用DOM
API遍歷XML樹、檢索所需數據。分析該結構通常需要載入整個文檔和構造樹形結構,然後才可以檢索和更新節點信息。
由於DOM在內存中以樹形結構存放,因此檢索和更新效率會更高。但是對於特別大的文檔,解析和載入整個文檔將會很耗資源。
3、PULL解析器:
PULL解析器的運行方式和SAX類似,都是基於事件的模式。不同的是,在PULL解析過程中,我們需要自己獲取產生的事件然後做相應的操作,而不像SAX那樣由處理器觸發一種事件的方法,執行我們的代碼。PULL解析器小巧輕便,解析速度快,簡單易用,非常適合在Android移動設備中使用,Android系統內部在解析各種XML時也是用PULL解析器。

『柒』 關於Android 用SAX和 DOM 解析XML的問題

我給個例子你看看,你好像掉了一步,沒建XMLReader.
String xmlpath = "http://10.0.0.53:18880/wl/mp3.xml";
String info = dMusic.getXMLContent(xmlpath);
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLReader reader = parser.getXMLReader();
MyXMLHandler handler = new MyXMLHandler();
reader.setContentHandler(handler);
reader.parse(new InputSource(new StringReader(info)));

『捌』 Android怎麼用dom解析HTML,HTML嵌套了這么多<div>節點,難道要一個一個子節點的找下去

參考一下這個。。。。
http://www.cfanz.cn/?c=article&a=read&id=29005
有類庫可以幫你的。

『玖』 android用dom解析xml效率怎麼樣

dom小的文件可以
他把文件全部載入到手機
再進行解析
大文件的話用SAX
或者pull解析
他們是事件驅動邊載入邊解析
而且SAX有重載的方法
簡單
好用

『拾』 新手使用android的XML(DOM)解析問題,指定路徑XML如何讀取

一、在Android應用中的XML文件來源
1、本地xml文件
本地XML文件可以放在應用根目錄assets文件夾、res/xml、res/raw、SDcard卡、應用的data目錄等;
除res/xml可直接通過getXml(int id)獲取XML文檔,返回一個解析器對象(XmlResourceParer:XmlResourceParer是XmlPullParser的子類),其它位置情況都可以獲取XML文檔,返回一個Inputstream對象,進行讀取數據,獲取方法分別如下:
a.在res/xml目錄下(推薦使用):
[java] view plain
XmlResourceParser xmlParser = this.getResources().getXml(R.xml.XXX);

b.在res/xml、res/raw目錄下:
[java] view plain
InputStream inputStream = this.getResources().openRawResource(R.xml.XXX);

c.在assets文件夾下(本人測試發現通過此方法獲取的XML文檔不能帶有首行:<?xml version="1.0" encoding="utf-8"?>,否則解析報錯,具體原因未查明,知道原因請回復交流):
[java] view plain
InputStream inputStream = getResources().getAssets().open(fileName);

d.在應用指定目錄下(SDcard,應用data目錄等):
[java] view plain
// path路徑根據實際項目修改,此次獲取SDcard根目錄
String path = Environment.getExternalStorageDirectory().toString();
File xmlFlie = new File(path+fileName);
InputStream inputStream = new FileInputStream(xmlFlie);

2、通過url得到的xml文件
很多時候需要解析xml文件都用於客戶端與伺服器之間的數據交互,比如解析google天氣預報信息,或自己項目內定的一些XML數據結構,其中通過URL,使用DefaultHTTPClient get請求獲取XML文件方法如下:
[java] view plain
/**
* 讀取url的xml資源 轉成String
* @param url
* @return 返回 讀取url的xml字元串
*/
public String getStringByUrl(String url) {
String outputString = "";
// DefaultHttpClient
DefaultHttpClient httpclient = new DefaultHttpClient();
// HttpGet
HttpGet httpget = new HttpGet(url);
// ResponseHandler
ResponseHandler<String> responseHandler = new BasicResponseHandler();

try {
outputString = httpclient.execute(httpget, responseHandler);
outputString = new String(outputString.getBytes("ISO-8859-1"), "utf-8"); // 解決中文亂碼

Log.i("HttpClientConnector", "連接成功");
} catch (Exception e) {
Log.i("HttpClientConnector", "連接失敗");
e.printStackTrace();
}
httpclient.getConnectionManager().shutdown();
return outputString;
}

二、XML文件的解析方式
能夠運用在Android系統上解析XML文件的常用有三種方式:DOM、SAX和PULL,其中DOM解析XML是先把XML文件讀進內存中,再通過介面獲取數據,該方法使用相對小的XML文件,移動設備往往受硬體性能影響,如果XML文件比較大使用DOM解析往往效率跟不上;SAX和PULL都是採用事件驅動方式來進行解析,在Android中的事件機制是基於回調函數。
本例旨在考慮簡單方便性,綜合考慮選擇了PULL解析,PULL解析器是一個開源項目,Android平台已經內置了PULL解析器,同時Android系統本身也是使用PULL解析器來解析各種XML文檔。
1、事件回調類型
PULL解析XML文件時,回調XmlResourceParser內定義表示文檔開頭結束和節點開頭結束的數值(事件回調類型),表示如下:
a.讀取到XML文檔開頭(聲明)返回:XmlPullParser.START_DOCUMENT(0)
b.讀取到XML文檔結束返回:XmlPullParser.END_DOCUMENT (1)
c.讀取到XML節點開始返回:XmlPullParser.START_TAG (2)
d.讀取到XML節點結束返回:XmlPullParser.END_TAG (3)
e.讀取到XML文本返回:XmlPullParser.TEXT (4)

2、XmlPullParser有幾個主要方法(更多查閱Android APIs):
a.XmlPullParser.getEventType() : Returns the type of the current event (START_TAG, END_TAG, TEXT, etc.) 【獲取當前事件回調類型】
b.XmlPullParser.getName():For START_TAG or END_TAG events, the (local) name of the current element is returned when namespaces are enabled.【獲取當前節點名字】
c.XmlPullParser.getAttributeValue(int index):Returns the given attributes value.【根據id獲取節點屬性值】
d.XmlPullParser.getAttributeValue(String namespace, String name):Returns the attributes value identified by namespace URI and namespace localName.【根據name獲取節點屬性值】
e.XmlPullParser.netxText():If current event is START_TAG then if next element is TEXT then element content is returned or if next event is END_TAG then empty string is returned, otherwise exception is thrown.【回調節點START_TAG時,通過此方法獲取節點內容】
3、實際編碼中如何使用
在實際編碼中,主要根據事件回調類型,結合被解析的XML結構進行解析提取數據,PULL解析XML文件的主要模式如下,更具體使用看本文提供的例子:
[java] view plain
try {
//開始解析事件
int eventType = parser.getEventType();

//處理事件,不碰到文檔結束就一直處理
while (eventType != XmlPullParser.END_DOCUMENT) {
//因為定義了一堆靜態常量,所以這里可以用switch
switch (eventType) {
case XmlPullParser.START_DOCUMENT:
// 不做任何操作或初開始化數據
break;

case XmlPullParser.START_TAG:
// 解析XML節點數據
// 獲取當前標簽名字
String tagName = parser.getName();

if(tagName.equals("XXXTAGXXX")){

// 通過getAttributeValue 和 netxText解析節點的屬性值和節點值

}
break;

case XmlPullParser.END_TAG:
// 單節點完成,可往集合里邊添加新的數據
break;
case XmlPullParser.END_DOCUMENT:

break;
}

// 別忘了用next方法處理下一個事件,不然就會死循環
eventType = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}

熱點內容
sql資料庫管理器 發布:2025-01-05 09:17:27 瀏覽:857
安卓如何獲取callkit測試許可權 發布:2025-01-05 09:17:23 瀏覽:892
解壓是出現錯誤 發布:2025-01-05 09:17:15 瀏覽:360
風櫃冷量演算法 發布:2025-01-05 09:15:04 瀏覽:354
腳本被檢測到游戲行為違規 發布:2025-01-05 08:40:55 瀏覽:615
手柄藍牙編程 發布:2025-01-05 08:40:54 瀏覽:992
雲伺服器搭橋 發布:2025-01-05 08:40:12 瀏覽:420
神武逍遙外傳腳本 發布:2025-01-05 08:34:46 瀏覽:462
王者榮耀如何查看對方伺服器 發布:2025-01-05 08:17:50 瀏覽:749
油猴加密 發布:2025-01-05 08:08:52 瀏覽:702