Dom和sax解析区别:
1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式
sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析
器都支持它。
2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document
对象,从而再对XML文档进行操作。在此种情况下,如果xml文档特别大,就会消耗计算机的大量
内存,并且容易导致内存溢出。
SAX解析允许在操作读取文档的时候,即对文档进行处理,而不必等到整个文档加载完才会对
文档进行操作。
-------------DOM4J---------------------------
1.Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开
发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提
供了比JDOM更好的灵活性。
2.Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很
多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
3.使用Dom4j开发,需下载dom4j相应的jar文件。
DOM4j中,获得Document对象的方式有三种:
Xpath介绍:
1. 在xml文档中查找信息的语言
2. 通过元素和属性进行查找
3. 简化Dom4j查找节点的过程
4. /students/student
5. 从根元素开始逐层找,以”/”开头
6. //name
7. 直接获取所有name元素对象,以“//”开头
8. //student/*
9. 获取所有student元素的所有子元素对象
10. //student[1]或//student[last()]
11. 获取所有student元素的第一个或最后一个
12. //student[@id]
13. 获取所有带id属性的student元素对象
14. //student[@id=‘002']
15. 获取id等于002的student元素对象
l 获取所有符合条件的节点
• document.selectNodes(StringxpathExpression)
返回List集合
l 获取符合条件的单个节点
• document.selectSingleNode(StringxpathExpression)
• 返回一个Node对象。
• 如果符合条件的节点有多个,那么返回第一个。
------------SAX解析----------
SAX解析思想:解析器和事件处理器
1.解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档
2.解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会调用
事件处理器的一个方法,解析器在调用事件处理器的方法时,就把当前解析到的xml的文件内容
作为参数,传递给事件处理器。
3.程序员编写事件处理器,通过事件处理器中方法的参数,得到解析的数据,对数据进行操作。
eg:
//1.创建解析工厂对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.用工厂对象产生解析器对象
SAXParser parser= factory.newSAXParser();
//3.用解析器对象得到一个读取器对象
XMLReader xmlReader=parser.getXMLReader();
//4.给读取器设置一个处理器
xmlReader.setContentHandler(newMyContentHandler() );
//用解析器去读取book.xml
xmlReader.parse("src\\cn\\itcast\\day02\\book.xml");
其中MyContentHandle继承制DefaultHandler类,覆写需要的方法:
1.startDocument()
2.endDocument()
3.startElemnet()
4.endElment();
5.characters();
其中得到属性的方法:
attributes.getValue("方法名");
注:sax只能用于读取xml文件,无法作更新
------------Dom解析-----------------
主要的概念:
Node:xml文件所有对象的根接口 节点
Document:代表xml文件的整个内容的对象的接口
Element:代表某个元素或标签的对象的接口
Attr:代表某个元素的某个属性对象的接口
Text:代表标签体文本内容对象的接口
NodeList:代表包含多个Node接口对象的集合对象
可以对标签进行增(create)删(Delete)改(update)查(read)----CRUD
读:查看所有的数据 有条件的查询数据
写入:将一个User对象的信息保存为一个user标签
更新:创建一个有数据的user对象,根据其中的某个属性数据值去找对应的user标签,
将user对象的数据放到此user标签中
删除:删除所有user标签,有条件的删除:id=2删除对应的user标签
操作的基本步骤:
1.加载xml文件得到Document()
Document document = getDocument();
2.得到根标签(uers标签)
Element usersEle =document.getDocumentElement();
3.得到跟标签的所有子标签(得到Users标签的所有子标签,返回一个NodeList)
NodeList nodeList =usersEle.getElementsByTagName("user");
4.遍历List进行操作。
for(int i=0;i<nodeList.getLength();i++){}
常用的方法:文档解析器工厂---->解析器对象----->用解析器解析xml文件得到Document对象
private Document getDocument() throwsParserConfigurationException,
SAXException,IOException {
//创建一个文档解析器工厂对象
DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory
.newInstance();
//根据工厂对象得到解析器对象password
DocumentBuilderbuilder = builderFactory.newDocumentBuilder();
//用解析器解析xml文件得到Document对象
Documentdocument = builder.parse(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
returndocument;
}
保存信息: 思路:转移器工厂对象---->通过工厂得到转移器---->通过转移器将Document的数
据转移到文件中去
private void saveDocument(Documentdocument)
throwsTransformerFactoryConfigurationError,
TransformerConfigurationException,TransformerException {
// 创建一个转移器工厂对象
TransformerFactory factory =TransformerFactory.newInstance();
// 通过工厂对象得到一个转移器
Transformer transformer =factory.newTransformer();
// 通过转移器将Document的数据转移到users.xml文件中去
DOMSource xmlSource = newDOMSource(document);
StreamResultoutputTarget = new StreamResult(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
transformer.transform(xmlSource,outputTarget);
}
Node appendChild(newChild) 将新的节点添加为最后一个子节点
insertBefore(newChild,refChild) 在某个子节点前插入一个新子节点
removeChild(oldChild) 删除指定的某个子节点
replaceChild(newChild,oldChild) 将指定的子节点替换成新的子节点
setTextContent(textContent) 设置文本内容(一般用在元素对象上)
getNodeName() 得到节点名称(一般用在元素对象上)
getParentNode() 得到父节点(一般用在元素对象上)
getTextContent() 得到文本内容(一般用在元素对象上)
getFirstChild() 得到第一个子节点
getLastChild() 得到最后一个子节点
getNextSibling() 得到下一个兄弟节点
getPreviousSibling() 得到上一个兄弟节点
Document
createElement(name) 创建一个指定名称的标签对象返回
getDocumentElement() 得到xml文件根标签
getElementById(id) 根据id属性值获取一个子标签对象
getElementsByTagName(name) 根据标签名得到所有对应的子标签
Element
setAttribute(name,value) 设置属性的名称和值
removeAttribute(attrName) 根据属性名删除对应的属性值
getAttribute(attrName) 根据属性名得到相应的属性值
getElementsByTagName(name) 根据标签名得到对应的子标签
getTagName() 得到标签名
Attr、Text 极少直接操作这两个接口的对象,一般通过Element对象来操作
NodeList getLength()得到包含的节点对象的个数 item(index)根据下标得到某个节点
转自:http://blog.csdn.net/wd916913/article/details/8088033
1.dom:(Document Object Model,文档对象模型) W3C组织推荐的一种处理方式
sax:(Simple API for XML)不是官方标准,但它是XML社区事实上的标准,几乎所有的XML解析
器都支持它。
2.使用Dom解析XML文档时,需要读取整个XML文档,在内存中架构架构代表整个DOM树的Document
对象,从而再对XML文档进行操作。在此种情况下,如果xml文档特别大,就会消耗计算机的大量
内存,并且容易导致内存溢出。
SAX解析允许在操作读取文档的时候,即对文档进行处理,而不必等到整个文档加载完才会对
文档进行操作。
-------------DOM4J---------------------------
1.Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM的人分离出来而后独立开
发的。与JDOM不同的是,dom4j使用接口和抽象基类,虽然Dom4j的API相对要复杂一些,但它提
供了比JDOM更好的灵活性。
2.Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很
多软件采用的Dom4j,例如Hibernate,包括sun公司自己的JAXM也用了Dom4j。
3.使用Dom4j开发,需下载dom4j相应的jar文件。
DOM4j中,获得Document对象的方式有三种:
1.读取XML文件,获得document对象 SAXReader reader = newSAXReader(); 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");
元素Element操作: //获取文档的元素. Element root = document.getRootElement(); //获取某个元素的指定名称的第一个子节点. Elementelement = element.element(“书名"); //获取某个元素的指定名称的所有子元素的集合 List list = element.elements(“书名”); //添加一个指定名称的子元素 Element childEle = parentEle.addElement(“书名”); //删除某个元素指定的子元素 parentEle.remove(childEle); 属性Attribute操作 //获取某个元素的指定名称的属性对象 Attribute attr = element.attribute(“id”); //获取某个元素的指定名称的属性值 String id = element.attributeValue(“id”); //给元素添加属性或更新其值 Attribute attr =element.addAttribute(“id”,”123”); //删除某个元素的指定属性 element.remove(attribute); 文本Text的操作 //获取某个元素的文本内容 String text = element.getText(); //给某个元素添加或更新文本内容 element.setText(“Tom”); 将文档写入XML文件. 1.文档中全为英文,不设置编码,直接写入的形式. XMLWriter writer = new XMLWriter(new FileWriter("output.xml")); writer.write(document); writer.close(); 2.文档中含有中文,设置编码格式写入的形式. OutputFormat format =OutputFormat.createPrettyPrint();// 指定XML编码 format.setEncoding( “utf-8"); XMLWriter writer = new XMLWriter(newFileWriter( "output.xml“ ),format); writer.write(document); writer.close();
Xpath介绍:
1. 在xml文档中查找信息的语言
2. 通过元素和属性进行查找
3. 简化Dom4j查找节点的过程
4. /students/student
5. 从根元素开始逐层找,以”/”开头
6. //name
7. 直接获取所有name元素对象,以“//”开头
8. //student/*
9. 获取所有student元素的所有子元素对象
10. //student[1]或//student[last()]
11. 获取所有student元素的第一个或最后一个
12. //student[@id]
13. 获取所有带id属性的student元素对象
14. //student[@id=‘002']
15. 获取id等于002的student元素对象
l 获取所有符合条件的节点
• document.selectNodes(StringxpathExpression)
返回List集合
l 获取符合条件的单个节点
• document.selectSingleNode(StringxpathExpression)
• 返回一个Node对象。
• 如果符合条件的节点有多个,那么返回第一个。
Eg: publicvoid testGetPriceByName() throws Exception { // 加载xml文件 Document document = getDocument(); String xpath="//书[@书名='JavaScript网页开发']/售价"; List<Node> nodes= document.selectNodes(xpath); for(Node node:nodes){ if(node.getName().equals("售价")){ System.out.println(node.getText());} } }
------------SAX解析----------
SAX解析思想:解析器和事件处理器
1.解析器可以使用JAXP的API创建,创建出SAX解析器后,就可以指定解析器去解析某个XML文档
2.解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会调用
事件处理器的一个方法,解析器在调用事件处理器的方法时,就把当前解析到的xml的文件内容
作为参数,传递给事件处理器。
3.程序员编写事件处理器,通过事件处理器中方法的参数,得到解析的数据,对数据进行操作。
eg:
//1.创建解析工厂对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//2.用工厂对象产生解析器对象
SAXParser parser= factory.newSAXParser();
//3.用解析器对象得到一个读取器对象
XMLReader xmlReader=parser.getXMLReader();
//4.给读取器设置一个处理器
xmlReader.setContentHandler(newMyContentHandler() );
//用解析器去读取book.xml
xmlReader.parse("src\\cn\\itcast\\day02\\book.xml");
其中MyContentHandle继承制DefaultHandler类,覆写需要的方法:
1.startDocument()
2.endDocument()
3.startElemnet()
4.endElment();
5.characters();
其中得到属性的方法:
attributes.getValue("方法名");
注:sax只能用于读取xml文件,无法作更新
------------Dom解析-----------------
主要的概念:
Node:xml文件所有对象的根接口 节点
Document:代表xml文件的整个内容的对象的接口
Element:代表某个元素或标签的对象的接口
Attr:代表某个元素的某个属性对象的接口
Text:代表标签体文本内容对象的接口
NodeList:代表包含多个Node接口对象的集合对象
可以对标签进行增(create)删(Delete)改(update)查(read)----CRUD
读:查看所有的数据 有条件的查询数据
写入:将一个User对象的信息保存为一个user标签
更新:创建一个有数据的user对象,根据其中的某个属性数据值去找对应的user标签,
将user对象的数据放到此user标签中
删除:删除所有user标签,有条件的删除:id=2删除对应的user标签
操作的基本步骤:
1.加载xml文件得到Document()
Document document = getDocument();
2.得到根标签(uers标签)
Element usersEle =document.getDocumentElement();
3.得到跟标签的所有子标签(得到Users标签的所有子标签,返回一个NodeList)
NodeList nodeList =usersEle.getElementsByTagName("user");
4.遍历List进行操作。
for(int i=0;i<nodeList.getLength();i++){}
常用的方法:文档解析器工厂---->解析器对象----->用解析器解析xml文件得到Document对象
private Document getDocument() throwsParserConfigurationException,
SAXException,IOException {
//创建一个文档解析器工厂对象
DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory
.newInstance();
//根据工厂对象得到解析器对象password
DocumentBuilderbuilder = builderFactory.newDocumentBuilder();
//用解析器解析xml文件得到Document对象
Documentdocument = builder.parse(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
returndocument;
}
保存信息: 思路:转移器工厂对象---->通过工厂得到转移器---->通过转移器将Document的数
据转移到文件中去
private void saveDocument(Documentdocument)
throwsTransformerFactoryConfigurationError,
TransformerConfigurationException,TransformerException {
// 创建一个转移器工厂对象
TransformerFactory factory =TransformerFactory.newInstance();
// 通过工厂对象得到一个转移器
Transformer transformer =factory.newTransformer();
// 通过转移器将Document的数据转移到users.xml文件中去
DOMSource xmlSource = newDOMSource(document);
StreamResultoutputTarget = new StreamResult(new File(
"H:\\workspace\\day01\\src\\cn\\itcast\\dom\
\users.xml"));
transformer.transform(xmlSource,outputTarget);
}
Node appendChild(newChild) 将新的节点添加为最后一个子节点
insertBefore(newChild,refChild) 在某个子节点前插入一个新子节点
removeChild(oldChild) 删除指定的某个子节点
replaceChild(newChild,oldChild) 将指定的子节点替换成新的子节点
setTextContent(textContent) 设置文本内容(一般用在元素对象上)
getNodeName() 得到节点名称(一般用在元素对象上)
getParentNode() 得到父节点(一般用在元素对象上)
getTextContent() 得到文本内容(一般用在元素对象上)
getFirstChild() 得到第一个子节点
getLastChild() 得到最后一个子节点
getNextSibling() 得到下一个兄弟节点
getPreviousSibling() 得到上一个兄弟节点
Document
createElement(name) 创建一个指定名称的标签对象返回
getDocumentElement() 得到xml文件根标签
getElementById(id) 根据id属性值获取一个子标签对象
getElementsByTagName(name) 根据标签名得到所有对应的子标签
Element
setAttribute(name,value) 设置属性的名称和值
removeAttribute(attrName) 根据属性名删除对应的属性值
getAttribute(attrName) 根据属性名得到相应的属性值
getElementsByTagName(name) 根据标签名得到对应的子标签
getTagName() 得到标签名
Attr、Text 极少直接操作这两个接口的对象,一般通过Element对象来操作
NodeList getLength()得到包含的节点对象的个数 item(index)根据下标得到某个节点
转自:http://blog.csdn.net/wd916913/article/details/8088033
发表评论
-
java验证字符串中是否包含数字,对数字的操作
2016-03-15 11:01 9568在javascript中有一个方法 ... -
jdk7 Collections.sort()方法报非法参数异常
2016-03-03 18:57 12138JDK7的Comparison method violates ... -
log4j.properties配置详解
2016-01-18 16:50 1343Log4J的配置文件(Configuration File)就 ... -
Java 日期时间 Date类型,long类型,String类型表现形式的转换
2015-12-24 17:35 3335Java 日期时间 Date类型,long类型,String类 ... -
Java多线程-工具篇-BlockingQueue
2015-11-24 16:13 1027Java多线程-工具篇-Block ... -
Java 实例 - 队列(Queue)入门用法
2015-11-23 17:27 2048队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表 ... -
Java中序列化的serialVersionUID作用
2015-11-13 14:13 4910Java序列化是将一个对象 ... -
java的序列化和反序列化
2015-10-27 19:48 1162Java基础学习总结——Jav ... -
java中volatile关键字的含义
2015-08-12 20:10 806java中volatile关键字的含 ... -
Java读写文件中文乱码问题
2015-07-20 17:49 3019问题:在用Java程序进行读写含中文的txt文件时,经常会出现 ... -
String类中split方法的使用
2015-07-02 14:39 1043String类中split方法的使用 split 方法:将一个 ... -
PreparedStatement防止SQL注入
2015-04-11 16:27 2864一条效率差的sql语句,足以毁掉整个应用. Stateme ... -
Session的生命周期
2015-04-11 11:58 996我们已经知道,Session是在用户第一次访问网 ... -
JAVA多线程和并发基础
2015-04-11 11:58 820JAVA多线程和并发基础 ... -
Java中equals()与hashCode()方法详解
2015-04-08 16:19 941一.equals()方法详解 equals()方法在o ... -
json数据后台处理
2015-03-30 16:05 849JAVA解析JSON问题,怎么解析,急!! String j ... -
java判断list为空
2015-01-30 15:25 4029java判断list为空 if(null == list | ... -
httpclient使用实践
2015-01-09 17:09 1407httpclient是什么这里不再详述(可参考最下方网址);直 ... -
java反射获取属性和方法
2015-01-09 11:12 3158反射的应用一般是要用到某些特殊类的属性和方法,无论是一般方法还 ... -
java中int 转String位数不够前面补零
2015-01-08 21:53 20079java 中int 转String位数不够前面补零 Stri ...
相关推荐
制定CA6140车床拨叉的加工工艺,设计钻φ5孔的钻床夹具设计.rar
这是 《128 基于STM32的儿童误锁车内远程报警系统【QT上位机源码】》 项目的Qt上位机上位机源码包。 这是一个Qt工程,采用QT5.12.6版本开发的源码。支持生成Windows系统运行程序。也支持生成Android手机APP。 对应项目的博客链接:https://blog.csdn.net/xiaolong1126626497/article/details/132015856 注意 注意 注意!!!: 如果不需要修改上位机源码,就不用下载本资源 (本项目的STM32源码包里就包含了上位机APP安装包,可以直接使用),在设计文档里也写了上位机的核心代码。 如果想学习本项目的上位机开发,学习上位机的源码,修改源。那么可以下载。 最好自己具备一定的Qt开发基础。
水泥粉磨生产工艺流程图.zip
WINDOWS系统读取苹果分区的利器,支持HFS+及APFS分区。
基于Ryu 控制器和 Mininet 实现软件定义网络(SDN)负载均衡解决方案,用于网络模拟.zip
20250415API翻譯
Git知识学习(尚硅谷)
手机充电器的模具设计.zip
python
基于SpringBoot的体育商品推荐系统,系统包含两种角色:管理员、用户主要功能如下。 【用户功能】 1. **首页:** 浏览体育商品推荐系统的主要信息。 2. **商品信息:** 查看系统推荐的体育商品。 3. **交流论坛:** 参与用户间的体育商品讨论和交流。 4. **公告资讯:** 查看系统发布的重要通知和体育商品资讯。 5. **留言板:** 发表个人意见和留言,参与系统互动。 6. **购物车:** 查看已选购的体育商品,进行结算和下单。 7. **个人中心:** 管理个人信息,查看订单历史和进行相关操作。 【管理员功能】 1. **首页:** 查看体育商品推荐系统。 2. **个人中心:** 修改密码、管理个人信息。 3. **用户管理:** 审核和管理注册用户的信息。 4. **商品分类管理:** 管理体育商品的分类信息。 5. **商品信息管理:** 监管和管理体育商品的信息。 6. **交流论坛:** 管理用户间的讨论和交流,包括删除不当内容。 7. **留言板:** 管理用户的留言,进行适当的处理。 8. **系统管理:** - **轮播图管理:** 管理系统首页的轮播图,包括添加、编辑和删除。 - **关于我们:** 编辑和更新关于体育商品推荐系统的介绍。 - **公告资讯:** 发布、编辑和删除系统的通知和公告。 - **系统简介:** 提供体育商品推荐系统的简要介绍。 9. **订单管理:** - **已退款订单:** 查看和管理已退款的订单信息。 - **未支付订单:** 查看和管理未支付的订单信息。 - **已发货订单:** 查看和管理已发货但未完成的订单信息。 - **已支付订单:** 查看和管理已支付但未完成的订单信息。 - **已完成订单:** 查看和管理已完成的订单信
内容概要:本文详细介绍了LiteOS这一轻量级物联网操作系统,涵盖其特点、应用场景、开发环境搭建、内核机制、实战演练及进阶学习。LiteOS由华为开发,专为资源受限设备设计,具备轻量级、高效性、安全性和开放性等特点,适用于智能家居、工业自动化、智能穿戴和智能城市建设等领域。文章逐步讲解了Windows和Linux系统下搭建LiteOS开发环境的具体步骤,包括安装交叉编译器、HiSpark Studio、配置Python环境、下载并配置LiteOS SDK等。深入探讨了LiteOS内核的任务管理和内存管理机制,并通过Hello World程序展示了创建任务、编写代码、编译和烧录的完整流程。最后,介绍了SAL及socket编程,提供了丰富的学习资源,包括官方文档、技术论坛和开源代码库。 适合人群:具备一定编程基础,尤其是对物联网开发感兴趣的开发者,以及希望深入了解嵌入式操作系统原理的技术人员。 使用场景及目标:①学习如何在资源受限的设备上开发高效稳定的应用程序;②掌握LiteOS的任务管理、内存管理等核心机制;③通过实战演练和进阶学习,提高物联网设备的网络通信能力,如使用SAL及socket编程实现设备与服务器之间的TCP通信。 其他说明:本文不仅提供了理论知识,还结合具体代码示例和实际操作步骤,帮助读者更好地理解和应用LiteOS。物联网技术正处于快速发展阶段,掌握LiteOS开发技能将为开发者在智能家居、工业自动化、智能穿戴等领域提供强大的竞争力。
Android开发14版本请求存储权限,它有部分允许权限,有一点难度。
在vs集成开发环境中,使用C/C++开发的游戏:球球大作战(注意要使用EasyX库)
内容概要:本文档为《露天矿山边坡安全监测技术规范》,旨在规定金属非金属露天矿山采场边坡安全监测的原则、内容、方法和技术要求,涵盖变形监测、采动应力监测、爆破振动监测、降雨和地下水监测、视频监控、在线监测系统等方面。文档详细介绍了监测系统的安装、维护和监测资料的整理分析等管理要求。通过定义边坡分类、安全监测分级、监测要求和具体监测方法,确保露天矿山边坡的安全性和稳定性。 适用人群:适用于从事露天矿山边坡安全监测的设计、施工、管理和研究人员,以及矿山企业的安全管理人员。 使用场景及目标:①用于指导露天矿山边坡的安全监测工作,确保监测系统的设计、安装、调试和运行符合标准;②通过对边坡变形、应力、爆破振动、水文气象等进行监测,预防和控制边坡失稳事故的发生;③利用在线监测系统和数据分析,实现对边坡安全状况的实时监控和预警。 其他说明:本文档不适用于与煤共生、伴生的金属非金属露天矿山采场边坡。文档提供了详细的监测方法和要求,强调了监测系统的兼容性、可扩展性和数据的安全存储。此外,还特别强调了定期巡查和信息反馈机制的重要性,以确保监测系统的有效运行和及时响应异常情况。
acacia_door_bottom
Android开发不用存储权限进行拍照,得到拍照后的图片效果。有一点难度,关键是存储路径的定义。
27910240_g.zip
Android开发红包动画效果,红包在那左晃右晃,吸引你点击。
资源demo
black_concrete