本文内容

  • HTTP 响应实体主体:XML
  • XML parser
  • 总结
  • 各编程语言实现的 XML parser

 

HTTP 响应实体主体:XML


实体主体(entity-body)通常是HTTP响应里最重要的部分。就 Web 服务而言,实体主体通常是一个 XML 文档,其中包含客户端所需的大部分信息。这些信息,在经过 XML parser 解析后,便可为客户端所用。

在得到 URI,一组报头和一个主体文档后,然后用 HTTP 库把这些数据变成 HTTP 请求,并发给服务器,接着用 XML 解析器把 HTTP 响应解析为一个数据结构或一系列事件。我们按照服务的要求发出请求,至于服务返回的响应数据,可以按自己意愿任意使用。

虽然大多数 Web 服务返回的都是 XML 文档,不过也逐渐有 Web 服务返回序列化为 JSON 字符串的简单数据结构。JSON 通常是供 Ajax 应用的客户端部分使用的。其想法是:浏览器从 JSON 数据结构得到 JavaScript 数据结构,要比从 XML 文档得到 JavaScript 数据结构容易得多。JSON 提供一种轻量级的序列化数据的方案,以作为基于 XML 的方案的补充。

XML parser


XML parser 可分为三种、两种基本的 XML 解析策略:基于文档的(document-based)策略和基于事件的(event-based)策略。基于文档的策略,如 DOM 等树式解析器;基于事件的策略,如 SAX 以及"拖"式(pull)解析器。

基于文档的树式策略,是三种中最简单的。树式解析器把 XML 文档建模为一种嵌套的数据结构。这种数据结构一旦生成好,你就可以用 XPath 查询、CSS 选择器(selector)等来查询和处理它。DOM 解析器是一种树式解析器,它实现了一个 W3C 定义的接口。树式策略的优点在于使用简单。可最大的缺点是:你必须把整个文档作为整体来处理。也就是说,你必须在把整个文档完全转换为树结构后才能处理它——这需要把整个文档载入内存,可想而知,如果是大文档,即使结构简单,那这种方式也很低效。要是能"解析一点,处理一点"就好了……

SAX 式或拖式(pull)解析器把一个 XML 文档转换成一个事件表,而不是数据结构。开始标签(starting tag)、结束标签(closing tag)、XML 注释(comments)以及实体声明(entity declaration)等都是事件(event)。

拖式解析器(pull parser)。假如几乎每个事件你都要处理,那 pull parser 将很有用。Pull parser 允许你一次处理一个事件,即:如果需要,就从事件流里"拖出(pull)"下一个事件。你可以对"拖出"的事件做相应处理,也可以用它构建一个数据结构(多半要比树式的数据结构要小)供以后使用,你可以在任何时候暂停解析文档,等需要继续时,再从事件流里"拖出"下一个事件。

SAX 解析器(SAX parser)更为复杂,但它在你只关心部分事件时很有用。你可以向 SAX parser 注册一些回调方法。一旦定义好回调方法,解析器将按照既定的、跟文档无关的步骤执行下去;解析器将把 XML 文档转换为一些系列事件,并接连处理文档中的每个事件,每当一个事件与回调方法所对应的事件相匹配,解析器就会触发该回调方法,执行你定义的代码,在回调方法执行结束后,SAX 解析器将接着继续处理事件序列。

总结


基于文档的解析器,优点是,你可以随机访问文档中的内容;而对于基于事件的解析器,事件触发后,就没有机会再次处理。如果想再次触发它,就得重新解析该文档。

而且,如果遇到格式有错误的 XML 文档,基于事件的解析器要直到处理到出错的地方才会报错和崩溃;因此,假使你不希望回调方法被格式有错误的文档锁触发,就必须在把 XML 文档交给基于事件的解析器处理前,确保该文档结构良好。

各编程语言实现的 XML parser


  • Ruby:REXML
  • Python:ElementTree 和 Beautiful Soup,以及 xml.sax 模块
  • Java:javax.xml、Xerces 和 XML Pull
  • C#:System.Xml.XmlReader
  • PHP:xml_parser_create 函数、XMLReader、SimpleXML、DOMIT!
  • JavaScript:responseXML
  • ActionScript:XML.load
  • C:Expat、libxml2
  • C++:Xerces-C++
  • Common Lisp:SXML
  • Perl:XML::Xpath、XML::Simple、XML::SAX::PurePerl、XML::LibXML::Reader

HTTP 响应实体主体:XML 及 XML parser的更多相关文章

  1. Power Designer导出实体类和NHibernate xml文件

    Power Designer导出实体类和NHibernate xml文件 今天研究了一下通过PowerDesigner生成实体类和NHibernate所需要的xml文件,方法是通过Power Desi ...

  2. XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax

    本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件 XML来 ...

  3. XML 参考:XML基础 XML 简介

    XML 参考:XML基础 -- XML简介和用途 转:http://www.cnblogs.com/Dlonghow/archive/2009/01/22/1379799.html XML 参考:XM ...

  4. Struts2中有关struts-default.xml,struts.xml,struts.properties文件详解

    1) struts-default.xml 这个文件是struts2框架默认加载的配置文件.它定义struts2一些核心的bean和拦截器. <?xml version="1.0&qu ...

  5. XML.ObjTree -- XML source code from/to JavaScript object like E4X

    转载于:http://www.kawa.net/works/js/xml/objtree-try-e.html // ========================================= ...

  6. 使用LINQ TO XML 创建xml文档,以及读取xml文档把内容显示到GridView例子

    首先,准备了一个Model类 using System; using System.Collections.Generic; using System.Linq; using System.Text; ...

  7. 【XML】 XML格式一些记录

    XML XML格式常用于网络通讯,本身不会有作为而是作为纯文本传输,可以说它是一种独立于应用和硬件的数据传输工具.虽然看起来XML比HTML要更加简单,也知道的更加晚一点,但是需要知道的是,XML才是 ...

  8. Linq To Xml操作XML增删改查

    对XML文件的操作在平时项目中经常要运用到,比如用于存放一些配置相关的内容:本文将简单运用Linq TO Xml对XML进行操作,主要讲解对XML的创建.加载.增加.查询.修改以及删除:重点在于类XD ...

  9. Java SE之XML<一>XML文档规约

    [文档整理系列] Java SE之XML<一>XML文档规约 1.xml文档引用: 1.外部私有DTD: <!DOCTYPE rootNodeName SYSTEM "ur ...

随机推荐

  1. WinForm MDIParent如何防止重复打开

    DI,全称是多文档界面(Multiple Document Interface),主要应用于基于图形用户界面的系统中.其目的是同时打开和显示多个文档,便于参考和编辑资料. 下面是一个WinForm M ...

  2. C#编程(五十)----------栈

    栈 栈与队列是一个非常类似的容器,他们的区别在于队列是先进先出,而栈是后进先出. Stack与Stack<T>,像队列一样,栈也提供了泛型与非泛型版本. Stack的方法: 方法 说明 P ...

  3. python测试开发django-22.admin首页和title修改

    前言 django的admin首页默认显示的"Django 管理",title显示的是"Django 站点管理员",这里的文案内容可以修改成自己项目的后台页面内 ...

  4. log4j1 修改FileAppender解决当天的文件没有日期后缀

    直接上代码: /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license ...

  5. 女子监狱第一季/全集Orange Is the New Black迅雷下载

    本季第一季 Orange Is the New Black 1 (2013) 看点:该剧描述主人公Piper Chapman(Taylor Schilling)在大学里结识了毒贩Alex(Laura ...

  6. 绝望的主妇第一二三季/Desperate Housewives迅雷下载

    绝望主妇 第一二三季 Desperate Housewives Season 1 2 3(2004 2005 2006) 本季看点:在紫藤街上住着这样一群主妇:拥有四个孩子和一个如孩子一般的丈夫的女强 ...

  7. TextView字体,行距,html格式,超链接,对大长度的设定

    颜色,大小 <span style="font-size:18px;"> <!-- 设置字体的大小,推荐用sp做单位:字体颜色以#开头 --> <Te ...

  8. 防止Memcached的DDOS攻击另外一个思路

    3月3日,国家互联网应急中心通报了一条消息 关于利用memcached服务器实施反射DDoS攻击的情况通报 通告了 memcached 服务器漏洞被黑客利用的情况,笔者的一台服务器也存在漏洞,因此将漏 ...

  9. information_schema系列七

    information_schema系列七   这个系列的文章主要是为了能够让自己了解MySQL5.7的一些系统表,统一做一下备注和使用,也希望分享出来让大家能够有一点点的受益. 第七篇主要看一下一下 ...

  10. 使用ASP.NET+Jquery DataTables的服务器分页

    (1)先建立表,看看表结构 (2)建立存储过程 DataTables是服务器分页,GetWxUsers存储过程使用了4个参数 (1) @start--表示当前第几页,例如第3页,start是从0开始 ...