我的公司拥有数千个现有的xml Web服务,并开始为新项目采用AngularJs。
http://angularjs.org/上的教程专门使用json服务。看起来他们在控制器中进行了服务调用,解析了生成的JSON,并将生成的对象直接传递给视图。
我该如何处理XML?我看到四个选项:
解析它,然后将DOM对象直接传递到UI(view)。
在服务器端围绕我的XML服务放置一个JSON包装器。
在客户端使用某些库将DOM对象转换为JSON,并在发出发布/放置请求时将其转换回。
在客户端手动将DOM对象转换为JavaScript对象。
什么是正确的方法,为什么?
如果选项2对您来说相对比较容易(例如,在后端控制器中添加一线JSON转换),那么这可能是一个不错的投资,因为JSON在网络上比较精简,而在客户端的工作量则少得多并通常被RESTful API使用者(如果有其他使用者)首选。
最近刚刚做了这样的工作,我会说下一个最佳路径(如果选择2是困难的)是使用响应和请求变压器将XML之间进行转换和JavaScript对象,这是你的选择3之间的某处变化和4. DOMParser对象是本机代码,因此它可以快速解析XML。将XML DOM转换为JavaScript对象并从JavaScript对象生成XML都是相当简单的递归算法。这种方法将所有其他客户端代码与后端表示分离,如果您选择了选项1,则不会如此。这种分离将使您可以直接使用基于JSON的RESTful接口,如果有这样的机会出现。
选择任何涉及JSON / JavaScript对象的选项通常会涉及处理阻抗失配问题,例如XML属性,XML集合与JS数组以及XML混合内容表示形式。如果您的数据模型足够简单,或者您不介意使用XML和JSON之间的即用型转换器提供的解决方案(例如,冗余对象包含,带编号的文本属性,以表示与元素混合的不相交的文本) ,那么这可能对您来说不是问题。否则,有必要在请求的两端强制定制转换行为(尽管据我所知,遗憾的是没有声明性的)。