将XML数据转换为Json格式AngularJS

9

我将尝试使用AngularJS中的Treeview指令。存储过程返回xml格式数据。而树视图指令需要json格式数据。控制器将从服务获取数据。我在尝试将xml转换为json时遇到了困难。

以下是xml结构:

<Company Data="New Company">
  <Manager Data="Working">
    <Employee Data="ABC" />
    <Employee Data="DEF" />
    <Employee Data="GHI">
      <SubEmployee Data="Approval">
        <Stuff Data="Financial" />
        <Stuff Data="Consol" />
      </SubEmployee>
      <SubEmployee Data="Rolled-Over">
        <Stuff Data="Corporate" />
      </SubEmployee>
    </Employee>
  </Manager>
</Company>

以下是预期的JSON格式:
[
  {
    label: "New Company",
    id: "Company",
    children: [
      {
        label: "Working",
        id: "Manager",
        children: [
          {
            label: "ABC",
            id: "Employee",
            children: [

            ]
          },
          {
            label: "DEF",
            id: "Employee",
            children: [

            ]
          },
          {
            label: "GHI",
            id: "Employee",
            children: [
              {
                label: "Approval",
                id: "SubEmployee",
                children: [
                  {
                    label: "Financial",
                    id: "Stuff",
                    children: [

                    ]
                  },
                  {
                    label: "Consol",
                    id: "Stuff",
                    children: [

                    ]
                  }
                ]
              },
              {
                label: "RolledOver",
                id: "SubEmployee",
                children: [
                  {
                    label: "Corporate",
                    id: "Stuff",
                    children: [

                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    ]

你是在询问如何使用JavaScript将XML转换为JSON吗? - rdjs
我想将XML转换为指定的JSON格式。 - user3083626
3个回答

5
你有两个选择:
  1. 以所需的JSON格式从API返回数据
  2. 在你的angular应用中使用javascript将XML转换为JSON。
如果可能的话,我建议选择选项1。如果选择选项2,请查看这个问题,其中讨论了Javascript中的XML / JSON转换:"Convert XML to JSON (and back) using Javascript"
如果你阅读上面链接中的答案,你会发现为什么选项1更可取。在这些格式之间进行转换可能会出现问题。

非常感谢。我正在从.edmx获取xml。存储过程正在返回xml。是的,第二个选项比较复杂。我应该在调用存储过程的.cs文件中将xml转换为json吗?你有什么建议? - user3083626
我不知道任何关于 .edmx 文件的事情。看起来你正在使用 c#。这是一个有关在 c# 中将 xml 转换为 json 的 SO 回答:https://dev59.com/LXRA5IYBdhLWcg3wzhfZ - rdjs
谢谢。我尝试着实现。Json和AngularJS对我来说都是新的。它使用静态类JsonConvert将xml转换为Json。所以它属于哪个命名空间?我需要添加哪个指令或程序集引用? - user3083626
那个问题最好在我提供的链接中问。 - rdjs

1
如果您的页面中有JQuery可用,您可以通过执行var data = jQuery(data);将XML转换为DOM对象。然后,使用jQuery选择器从中提取所需的数据。
一些示例:
// Extract an attribute from a node:
$scope.event.isLive = jQuery(data).find('event').attr('state') === 'Live';

// Extract a node's value:
$scope.event.title = jQuery('title', data).text();

1
我有点晚了,但由于我将使用一个只解析成XML的CMS,所以我也不得不查看这个选项。 在比赛的这个阶段,我不知道为什么会这样...但我偏离了主题。
在D-Zone上发现了这个,并且似乎具有潜力:https://dzone.com/articles/convert-xml-to-json-in-angular-js 基本上,您发出请求以获取XML,然后在另一个函数中将其转换为JSON。尽管您仍在提取XML数据,但您将能够使用JSON,这将节省您很多时间。
来自网站的示例(需要第三方插件X2JS):
var app = angular.module('httpApp', []);

app.controller('httpController', function ($scope, $http) {

$http.get("Sitemap.xml",

        {

transformResponse: function (cnv) {

  var x2js = new X2JS();

  var aftCnv = x2js.xml_str2json(cnv);

  return aftCnv;

}

})

.success(function (response) {

console.log(response);

});

});

还有一点需要注意,如果你像我一样使用Angular,则已经有人创建了一个很好的插件服务可供使用: https://github.com/johngeorgewright/angular-xml


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接