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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 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 promises
    this.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 created
    var 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 data
            if (response && response.body && response.headers["Content-Type"]) {
            // ##### END: MODIFIED BY SAP
                dispatchHandler("read", response, context);
            }
        },
相关文章
|
1月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
20天前
|
数据采集
深度解析CancellationToken在HttpClient请求中的应用
本文讨论了在.NET环境中使用HttpClient进行爬虫开发时,如何应用CancellationToken来控制请求的生命周期,提高爬虫的效率和稳定性。通过结合爬虫代理IP技术、多线程请求、设置User-Agent和Cookie等策略,可以增强爬虫的灵活性并降低被网站封禁的风险。文章提供了一个使用CancellationToken和代理IP的多线程爬虫实现示例代码,并详细解析了代码的关键部分,包括CancellationToken的使用、代理IP的配置、并发请求的实现以及User-Agent和Cookie的设置。
深度解析CancellationToken在HttpClient请求中的应用
|
10天前
|
存储 JSON API
Python编程:解析HTTP请求返回的JSON数据
使用Python处理HTTP请求和解析JSON数据既直接又高效。`requests`库的简洁性和强大功能使得发送请求、接收和解析响应变得异常简单。以上步骤和示例提供了一个基础的框架,可以根据你的具体需求进行调整和扩展。通过合适的异常处理,你的代码将更加健壮和可靠,为用户提供更加流畅的体验。
28 0
|
1月前
|
开发者 Python
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
深入解析Python `requests`库源码,揭开HTTP请求的神秘面纱!
120 1
|
1月前
|
负载均衡 Java API
深度解析SpringCloud微服务跨域联动:RestTemplate如何驾驭HTTP请求,打造无缝远程通信桥梁
【8月更文挑战第3天】踏入Spring Cloud的微服务世界,服务间的通信至关重要。RestTemplate作为Spring框架的同步客户端工具,以其简便性成为HTTP通信的首选。本文将介绍如何在Spring Cloud环境中运用RestTemplate实现跨服务调用,从配置到实战代码,再到注意事项如错误处理、服务发现与负载均衡策略,帮助你构建高效稳定的微服务系统。
48 2
|
2月前
|
Web App开发 域名解析 JSON
HTTP 及 http 请求解析过程
HTTP 及 http 请求解析过程
42 4
|
3月前
|
存储 缓存 负载均衡
elasticsearch写入流程和请求检索流程原理全方位解析
elasticsearch写入流程和请求检索流程原理全方位解析
|
3月前
|
域名解析 存储 缓存
HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口
【6月更文挑战第23天】 HTTP请求流程概览:浏览器构建请求行含方法、URL和版本;检查缓存;解析IP与端口;TCP连接(HTTP/1.1可能需排队);三次握手;发送请求头与体;服务器处理并返回响应;TCP连接可能关闭或保持;浏览器接收并显示响应,更新缓存。HTTP版本间有差异。
58 5
|
3月前
|
Java 应用服务中间件 API
Tomcat处理一个HTTP请求的执行流程的详细解析
Tomcat处理一个HTTP请求的执行流程的详细解析
96 4
|
3月前
|
前端开发 JavaScript 安全
跨域问题与Django解决方案:深入解析跨域原理、请求处理与CSRF防护
跨域问题与Django解决方案:深入解析跨域原理、请求处理与CSRF防护

推荐镜像

更多