SAP UI5 应用的 OData XML 格式的元数据请求解析原理,基于 DOMParser
前一篇文章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相关推荐
- SAP UI5 应用的 OData 元数据请求响应的解析原理分析
前一篇文章 SAP UI5 应用的 OData 元数据请求的发送原理分析我们学习了 SAP UI5 应用是如何自动发送 OData 元数据的 HTTP 请求. 本文继续学习该元数据请求的响应到达客户端 ...
- SAP UI5 应用读取 CSRF token 的 HTTP head 请求逻辑解析
SAP UI5 应用在发送 OData batch 请求之前,会通过下列的_createBatchRequest方法构造 batch 请求对象: var oBatchRequest = that._c ...
- java jdom格式_Java全面解析XML格式串(JDOM解析)
搜索热词 Java全面解析XML格式串(JDOM解析) import java.io.IOException; import java.io.StringReader; import java.uti ...
- python requests库api_Python+requests库发送接口入参为xml格式的接口请求
一)接口入参准备: 入参: <?xml version="1.0" encoding = "UTF-8"?> duoceshi 123456 DwO ...
- 接口测试中发送XML格式的post请求
前言 post请求相对于get请求多一个body部分,body部分常见的数据类型有以下四种(注意是常见的,并不是只有4种) application/x-www-form-urlencoded appl ...
- SAP UI5应用访问OData metadata的url和Destination
在SAP WebIDE里随便创建一个新的Fiori应用,访问一个OData服务: 直接在WebIDE里本地运行该Fiori应用,在Chrome开发者工具里把metadata请求的url抄下来: url ...
- SAP WebIDE 是如何加载SAP UI5里自定义的XML view的 - JerryMaster.view.xml
Created by Jerry Wang, last modified on Nov 08, 2015 Route _routeMatched Signal SignalBinding _oConf ...
- 25. 答疑 - SAP OData 框架处理 Metadata 元数据请求的实现细节,前后端组件部署在同一台物理服务器
我的知识星球 里有一个朋友提出了 SAP OData 服务 metadata 缓存方面的疑问,本文就来详细说一说: jerry,啥时候有时间给介绍一下fiori的Metadata数据系统的处理机制吧. ...
- SAP UI5 manifest.json 和 i18n 多语言文本的解析逻辑
正则表达式: {{foo}} 在 sap.ui.core.Component.js 里,执行 loadManifests 进行加载: 我们的 controller extensions 在这里也能看见 ...
最新文章
- 开源软件与商业软件的选择
- 机器学习实战 - 读书笔记(04) - 朴素贝叶斯
- javascript:可以运行的噪音
- 阿里:千亿交易背后的0故障发布
- python中修改字符串的值
- php获取当天 天气预报,PHP获取当天和72小时天气预报,并生成接口
- 利用Shell将MySQL数据表导出为csv文件
- 【对话】对话系统经典:检索式对话
- 浏览器控件JxBrowser V6.14大版本发布 | 注入CSS
- Atitit 信息化数据采集与分析解析 技术 处理技术 爬虫与http rest json xml h5解析 db数据库 mail协议与处理 数据压缩与解压 数据处理 文本处理
- html初始化调用js函数
- 数据投毒攻防对抗技术-1.数据投毒简介
- AD19中错误总结(持续进行中。。。。。。)
- 他们竟用后台数据偷窥喜欢的女性!Facebook一年半解雇52名工程师
- pytorch 梯度计算相关内容总结
- 亚马逊EC2使用账号密码登录
- html实现简易音乐播放器
- Macbook电池优化的七种建议
- (机顶盒)智能卡通信协议破解智能卡的基础知识
- Google新闻vs门户新闻:决裂还是共存