十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
今日目标:DOM、 SAX、 STAX、 XML解析API
创新互联公司专注于企业全网整合营销推广、网站重做改版、江汉网站定制设计、自适应品牌网站建设、H5网站设计、商城网站开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为江汉等各大城市提供网站开发制作服务。今日重点:JAXP DOM解析 、JAXP SAX解析、XML PULL解析。
XML现在已成为一种通用的数据交换格式,平台的无关性使得很多场合都需要用到XML。深入了解前端知识更能充分解决自动化的异常类问题。
一、
1、XML有三种解析方式:DOM SAX STAX
2、XML的作用(企业应用):存储数据、配置文件、传输数据。
存储和传输数据经常一起使用,XML数据通常由程序生成的,用程序解析XML(XML一般不加约束)
配置文件单独使用(通常会加约束)
3、DOM
全称为:Document Object Model文档对象模型。
DOM的解析思想 :将整个XML数据读取到内存中,在内存中形成文档树形结构,
对内存中文档树形结构进行操作。
优点:API简单。因为一次性加载整个文档,文档所有数据都在内存中,所以简便易用 处理
较方便。可频繁修改XML文件内容(即可回写)。
缺点:需将整个XML文档加载到内存,消耗系统资源。速度较慢。当XML文档过大时,会导致
无法全部加载进内存,内存溢出问题。
**DOM是官方提供的XML解析标准,由W3C制定 。
4、SAX
全称为:Simple API for XMl简单XML解析API。
SAX解析思想:为解析器绑定回调程序Handler , 解析器读取xml文件,触发相应事件,
自动调用handler中对应事件方法
优点:SAX是轻量级的接口,解析速度快,无须占用太多内存资源。
缺点:SAX每次都要从头到尾遍历节点,修改不易实现。编程复杂,如在内存中不保留读取的数据,将无法回写。
注:如果SAX、STAX在内存中边读边保存数据的话 ,就类似于DOM了。
**SAX是民间XML解析标准,来自XML社区。
**采用“推”模式,PUSH。
5、STAX
全称是:Streaming API for XML ,XML解析流API。
STAX解析思想 :提高SAX模式解析效率。亦为边读边处理。
**采用“拉”模式,PULL。
*****以上三种解析方式:性能比较::STAX >SAX >DOM
6、什么是推模式?什么是拉模式?
PUSH:是以服务器为主,控制操作流程模式。
当你将文档和处理程序 交给解析器,解析器自动进行解析,调用相应事件处理方法 (该过程不由你自己控制)。
服务器主动向客户端发送信息,发送过程中客户端不能干预 。
PULL:是以客户端为主,控制操作流程模式。
********
JAXP:
全称是Java API for XML Processing。
它是一套API。DOM、SAX、STAX只是XML的解析思想。JAXP是DOM、SAX、STAX的API具体实现。
由SUN提供 ,在JDK 6.0以后全面支持DOM、SAX、STAX三种解析方式。
XML PULL:拉模式解析XML框架,内置集成Android手机内部 。
DOM4J:DOM解析方式框架,开源。在企业端JavaEE 软件开发中。为最流行开发框架。
javax.xml核心xml解析API,是DOM、SAX、STAX公用API。
org.w3c.dom 与DOM解析相关具体API
org.xml.sax 与SAX解析相关具体API
整个XML会被解析为树形结构,元素、属性、文本,都会被解析为 Node节点 。
********
7、DOM解析入门:
(一)
(1)创建解析器工厂
DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance();
(2)根据解析器工厂获得解析器
DocumentBuilder documentBuilder=builderFactory.newDocumentBuilder();
(3)解析器读取XML文档进行解析,为Document对象(文档对象,代表整个XML文档)
Document document=documentBuilder.parse("test.xml");
(4)获得document文档后,就可以对它进行操作了。
例如 :可以通过getElementsByTagName查找指定名称元素NodeList。
NodeList nodeList=document.getElementsByTagName("name");
然后遍历集合获得每个Node节点。
for(int i=0;i Element node=(Element)nodeList.item(i); 再通过Node的getTextContent获得节点文本内容 。 System.out.println(node.getTextContent()); } (二)**node节点公共API中, getNodeName()返回节点的名称 getNodeType()返回节点的类型 getNodeValue()返回节点的值 (三)**XML 提供数据只能通过两种情况 : 第一种 * 获得元素文本子节点内容 获得元素后 element.getTextContent() element.getFirstChild().getNodeValue() * 获得元素属性值 获得元素后 element.getAttribute(属性名) (四)节点元素查询时 1、全局查找缩小范围 2、相对位置查找 父亲 儿子 兄弟 获得相对节点元素内容 注意事项 1、查询元素子节点时,注意回车换行 2、Document 类中 getElementById --- 使用时 xml文档必须有约束 DTD默认加载 , Schema需要编程 (五)对XML 进行增删改查 ---- 增加 、修改 、删除 * 对内存XML 文档修改后,回写到xml 文件中 添加节点 1、创建目标节点 document.createXXX 2、找到合适位置插入 父节点.appendChild 修改节点 1 修改文本内容 element.setTextContent(value) 2 修改属性 element.setAttribute(name,value) 删除节点 1 获得要删除节点o 2. o.getParentNode().removeChild(o); **(详细代码参见代码附录) 8、JAXP SAX 解析API 原理见上。 事件 startDocument 文档开始事件 startElement 元素开始事件 characters 文本元素事件 endElement 元素结束事件 endDocument 文档结束事件 对于SAX编程不要求掌握,了解原理就可以了。 在startElement 中 获得 开始元素是什么?qName 获得开始标签属性内容 ?attributes.getValue("属性名称") 在characters 中 获得读取到文本元素是什么 ? new String(ch,start,length) 在endElement 中 获得当前结束元素是什么 ?qName 9、XML Pull 解析器 (一)为开源框架 ,使用STAX类似拉模式解析方式。Android手机系统内置 工具类库。 ** 从事Android开发 。因为内置,无需下载任何jar包 ---- 如果从事JavaEE开发需要单独下载pull解析器类库。 **在pull 解析器官网上,看到pull解析器 API接口 。 **XNI2 XmlPull 、XPP3/MXP1 、kXML2 都是 pull解析器 接口API 的实现 **课程采用 xpp3 这套 pull解析器实现。 (二)什么是jar 包? 很多开源框架,会将class文件用zip格式进行压缩 获得压缩包。扩展名 jar (jar包) (三)XML PULL 快速入门 (1)、去官网下载 zip 压缩包(xpp3-1.1.3.4.C_all.zip),解压缩获得jar包(xpp3-1.1.3.4.C.jar)。 (2)、在当前工程目录下新建lib文件夹,将该jar包放到lib目录下。 (3)、右击jar包,Add to build path 将jar包添加到 当前工程 build path. 事件 start document start tag text end tag end document **使用pull解析器生成XML (1)、获得解析器工厂 XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance(); (2)、通过解析器工厂 获得序列化程序对象 XmlSerializer XmlPullParser parser = parserFactory.newPullParser(); (3)、设置 输出XML文件 位置 (4)、开始写 存在5个方法写你需要内容 *** 能力: 将List中数据 序列化到一个XML文件中 。 10、XML PULL 解析方式 与 SAX push 大区别? 程序员可以自己控制解析过程 。 用push 自动执行所有解析事件,使用pull 程序员可以控制只执行关注的那些事件,pull解析方式效率比push方式更高。 **获得元素属性 ----- 在元素开始时 ,通过parser.getAttributeValue(null,属性名称); 获得元素内部文本内容 ----- 在元素开始时, parser.nextText(); 11、XML PULL 对xml文件 进行CURD (Create Update Read Delete) * 使用pull 读取xml,读取内容不释放,在内存中保留 ---- DOM 类似 * 解析XML --- List 序列化 List --- XML * 使用pull 进行增删改查 --- 读取xml全部数据保存内存list对象,对内存list对象进行增删改查。 另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前标题:XML解析方法详解-创新互联
新闻来源:http://6mz.cn/article/docsds.html