前一篇文章SAP UI5 应用的 OData 元数据请求响应的解析原理分析我们介绍了 SAP UI5 OData 元数据解析的入口。本文继续介绍基于 DOMParser 的 XML 数据解析原理。

入口如下:

var xmlParse = function (text) {/// <summary>Returns an XML DOM document from the specified text.</summary>/// <param name="text" type="String">Document text.</param>/// <returns>XML DOM document.</returns>/// <remarks>This function will throw an exception in case of a parse error.</remarks>var domParser = window.DOMParser && new window.DOMParser();var dom;if (!domParser) {dom = msXmlParse(text);if (!dom) {xmlThrowParserError("XML DOM parser not supported");}return dom;}

dom = domParser.parseFromString(text, “text/xml”); 这是一个原生方法调用。

成功解析出的 dom 元素对象:

下面开始遍历这个 dom 对象:

拿到第一个元素:

递归操作:

解析成功的 metadata:

解析出的 entityType:

解析成功的元数据,存储在 response.data 里:

触发 metadata 加载成功的 callback:

ODataMetadata.prototype._handleLoaded = function(oMetadata, mParams, bSuppressEvents) {var aEntitySets = [];this.oMetadata = this.oMetadata ? this.merge(this.oMetadata, oMetadata, aEntitySets) : oMetadata;this.oRequestHandle = null;mParams.entitySets = aEntitySets;// resolve global promisesthis.fnResolve(mParams);if (this.bAsync && !bSuppressEvents) {this.fireLoaded(this);

抛出 loaded 事件:

该事件的参数为 metadata 的 json 对象格式和 xml 文本:

OData 元数据就绪后,执行初始化操作:

ODataModel.prototype.initialize = function() {// Call initialize on all bindings in case metadata was not available when they were createdvar aBindings = this.getBindings();aBindings.forEach(function(oBinding) {oBinding.initialize();});};

遍历所有的 binding 数据源。

SAP UI5 使用的 datajs.js, 是一种开源的跨浏览器 JavaScript 程序库,可以让开发人员在浏览器环境里消费 OData 服务。

在 SAP UI5 库里位于路径 sap/ui/thirdparty 下面,SAP 对该文件也做了一些自己的修改,通过注释 BEGIN: MODIFIED BY SAP 和 END: MODIFIED BY SAP 来标识。

一个例子如下:

    odata.defaultHandler = {read: function (response, context) {/// <summary>Reads the body of the specified response by delegating to JSON and ATOM handlers.</summary>/// <param name="response">Response object.</param>/// <param name="context">Operation context.</param>// ##### BEGIN: MODIFIED BY SAP// added response.body check and removed assigned(response.body) call...for the case that if body is empty string...don't process any response body dataif (response && response.body && response.headers["Content-Type"]) {// ##### END: MODIFIED BY SAPdispatchHandler("read", response, context);}},

更多Jerry的原创文章,尽在:“汪子熙”:

SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser相关推荐

  1. SAP UI5 应用的 OData 元数据请求响应的解析原理分析

    前一篇文章 SAP UI5 应用的 OData 元数据请求的发送原理分析我们学习了 SAP UI5 应用是如何自动发送 OData 元数据的 HTTP 请求. 本文继续学习该元数据请求的响应到达客户端 ...

  2. SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析

    SAP UI5 应用在发送 OData batch 请求之前,会通过下列的_createBatchRequest方法构造 batch 请求对象: var oBatchRequest = that._c ...

  3. java jdom格式_Java全面解析XML格式串(JDOM解析)

    搜索热词 Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.uti ...

  4. python requests库api_Python+requests库发送接口入参为xml格式的接口请求

    一)接口入参准备: 入参: <?xml version="1.0" encoding = "UTF-8"?> duoceshi 123456 DwO ...

  5. 接口测试中发送XML格式的post请求

    前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...

  6. SAP UI5应用访问OData metadata的url和Destination

    在SAP WebIDE里随便创建一个新的Fiori应用,访问一个OData服务: 直接在WebIDE里本地运行该Fiori应用,在Chrome开发者工具里把metadata请求的url抄下来: url ...

  7. SAP WebIDE 是如何加载SAP UI5里自定义的XML view的 - JerryMaster.view.xml

    Created by Jerry Wang, last modified on Nov 08, 2015 Route _routeMatched Signal SignalBinding _oConf ...

  8. 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器

    我的知识星球 里有一个朋友提出了 SAP OData 服务 metadata 缓存方面的疑问,本文就来详细说一说: jerry,啥时候有时间给介绍一下fiori的Metadata数据系统的处理机制吧. ...

  9. SAP UI5 manifest.json 和 i18n 多语言文本的解析逻辑

    正则表达式: {{foo}} 在 sap.ui.core.Component.js 里,执行 loadManifests 进行加载: 我们的 controller extensions 在这里也能看见 ...

最新文章

  1. 开源软件与商业软件的选择
  2. 机器学习实战 - 读书笔记(04) - 朴素贝叶斯
  3. javascript:可以运行的噪音
  4. 阿里:千亿交易背后的0故障发布
  5. python中修改字符串的值
  6. php获取当天 天气预报,PHP获取当天和72小时天气预报,并生成接口
  7. 利用Shell将MySQL数据表导出为csv文件
  8. 【对话】对话系统经典:检索式对话
  9. 浏览器控件JxBrowser V6.14大版本发布 | 注入CSS
  10. Atitit 信息化数据采集与分析解析 技术 处理技术 爬虫与http rest json xml h5解析 db数据库 mail协议与处理 数据压缩与解压 数据处理 文本处理
  11. html初始化调用js函数
  12. 数据投毒攻防对抗技术-1.数据投毒简介
  13. AD19中错误总结(持续进行中。。。。。。)
  14. 他们竟用后台数据偷窥喜欢的女性!Facebook一年半解雇52名工程师
  15. pytorch 梯度计算相关内容总结
  16. 亚马逊EC2使用账号密码登录
  17. html实现简易音乐播放器
  18. Macbook电池优化的七种建议
  19. (机顶盒)智能卡通信协议破解智能卡的基础知识
  20. Google新闻vs门户新闻:决裂还是共存

热门文章

  1. mysql slave 状态_python脚本 监控MySQL slave 状态
  2. SQL Server 数据库关键知识点详解(优秀经典)
  3. 产品经理,如何建立自己独特的产品观?(转)
  4. sys.getsizeof(), 字节之间的换算关系
  5. 微架构设计:微博计数器的设计
  6. PostgreSQL函数如何返回数据集
  7. black.lst 丢失或被破坏,怎么解决
  8. 从零写一个编译器(完结):总结和系列索引
  9. BZOJ 1500 维修数列
  10. ThreadLocal介绍以及源码分析