当前位置:首页 » 安卓系统 » 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();
}

热点内容
数据库返回值 发布:2025-01-07 06:17:26 浏览:375
弹簧自动压缩 发布:2025-01-07 06:08:35 浏览:522
传奇荣耀脚本 发布:2025-01-07 05:53:14 浏览:979
为什么安卓手机连接不了苹果耳机 发布:2025-01-07 05:37:49 浏览:75
c语言mfc 发布:2025-01-07 05:33:18 浏览:592
自己搭建邮件服务器ddns 发布:2025-01-07 05:19:29 浏览:205
光驱无法访问指定设备 发布:2025-01-07 05:17:19 浏览:104
如何删除人人网的访问记录 发布:2025-01-07 05:02:47 浏览:281
清华编译原理第2版答案pdf 发布:2025-01-07 04:48:03 浏览:936
pythonweb框架对比 发布:2025-01-07 04:48:00 浏览:606