如何处理AngularJS XML服务?(How to handle XML services in

2019-07-21 22:05发布

我公司拥有成千上万的现有的XML Web服务,并开始采用新的项目AngularJs。

超过本教程http://angularjs.org/使用JSON服务专。 看起来他们拨打服务电话的控制器,分析所生成的JSON,并将其直接传递结果对象的视图。

我该怎么用XML呢? 我看到四个选项:

  1. 分析它并直接传递DOM对象到UI(视图)。

  2. 将在我的XML服务JSON封装在服务器端。

  3. 转换DOM对象JSON的一些库在客户端,并将其转换回来时,我做了后/ PUT请求。

  4. 手动转换DOM对象为JavaScript对象在客户机侧。

什么是正确的做法,为什么?

Answer 1:

如果选择2是比较容易让你(如在后端控制器添加一行JSON的转换,例如),那么它很可能是一个很好的投资,因为JSON是通过线路精简,在客户端的工作远不如并且总体上用的RESTful API消费者(如果有其他消费者)优选的。

最近刚刚做了这样的工作,我会说下一个最佳路径(如果选择2是困难的)是使用响应和请求变压器来执行你的XML和JavaScript对象,这是一个变化的地方你的选择3之间的转换和4的DOMParser对象是原生代码,因此它解析XML足够快。 转换XML DOM到JavaScript对象和从JavaScript对象生成XML都相当简单的递归算法。 这种方法解耦所有的客户端代码从后端表示休息,如果你与你的选择。这样的去耦去将允许你直接使用基于JSON的RESTful接口的这不会是这样的,应该这样的机会出现。

选择涉及JSON / JavaScript对象通常会涉及到处理像XML属性,XML集合与JS数组和XML的混合内容表示阻抗失配问题的任何选项。 如果您的数据模型是很简单的,或者你不介意与XML和JSON之间出的现成变压器提供的解决方案生活(如冗余对象遏制,编号文本属性来表示不相交的文本与元素混合) ,那么这可能不是你的问题。 否则,有在请求的两端势在必行定制转变行为(虽然可惜不是声明,就我见过的)机会。



Answer 2:

我建议你有一个XML到JSON转换器。 这是一个。

https://code.google.com/p/jquery-xml2json-plugin/

转换后,你有一个正常的JS对象,你可以用你的正常角度指令通过他们来解析并根据需要使用它们。



Answer 3:

我有同样的问题。 最终使一个小模块转向到一个ng.element对象我所有的XML响应。

https://github.com/johngeorgewright/angular-xml



Answer 4:

我发现x2js是合作得非常好: https://code.google.com/p/x2js/

客户需要在XML中,没有必要惹角度的服务。 一个简单的快速转换和,瞧,你有一个JSON API,它mimcs XML文档。 似乎要把所有的使用情况我碰到的照顾。



Answer 5:

我创建了一个名为服务HttpService具有调用的函数getRequestedContent中,我采用了棱角分明的HTTP调用我的服务“ 的http://本地主机:8080 / showserverstartupinfo ”如下它返回一个xml:

<SERVERSTARTUPINFO>
<SERVERNAME>########</SERVERNAME>
<SERVERSTARTUPTIME>##########</SERVERSTARTUPTIME>
</SERVERSTARTUPINFO>

......我分析上面的XML和填充我的div与XML元素的含量。

HttpService.getRequestedContent('/showserverstartupinfo').then(
  function(content) {
    //successCallback
    var xml = content.data;
    document.getElementById('serverName').innerHTML = 
          xml.getElementsByTagName("SERVERNAME")[0].childNodes[0].nodeValue;
  }, function(data) {
    //errorCallback
});

getRequestedContent功能在HttpService的(Angularjs)如下:

getRequestedContent : function(request) {
  var url = this.getRootContextPath() + request;
  return $http({
    method : 'GET',
    url : url,
    transformResponse : function(data) {
      return $.parseXML(data);
    }
  });
}


文章来源: How to handle XML services in AngularJS?