【问题标题】:Angular x2js xml not definedAngular x2js xml 未定义
【发布时间】:2015-06-24 10:31:11
【问题描述】:

我正在尝试让this example 使用 xml 作为 json 数据。但是我对这些代码有些问题。

courses  = x2js.xml_str2json(data);
console.log(courses.books.course);
$scope.todos =courses.books.course;

在示例的 xml 中。有书籍和课程标签。但我不明白“课程”从何而来。

我正在尝试用这个 xml 示例做同样的例子

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
 <DocumentElement xmlns="">
  <semt_kodlari diffgr:id="semt_kodlari1" msdata:rowOrder="0">
   <semt_adi>ALTIKAT</semt_adi>
  </semt_kodlari>
 </DocumentElement>
</diffgr:diffgram>

这是我的 HTML 部分:

X = x2js.xml_str2json(data);
console.log(X.DocumentElement.semt_kodlari);
$scope.todos = X.DocumentElement.semt_kodlari;

当我运行此代码时,出现“无法读取未定义的属性 'semt_kodlari'”错误。那么有人可以告诉我我的代码有什么问题吗?课程和课程的区别是什么?

【问题讨论】:

    标签: javascript xml angularjs


    【解决方案1】:

    我认为您只缺少对象的一个​​父对象。如果您将diffgram 添加到您的console.log,它应该会按预期工作。

    查看下面的演示或jsfiddle

            var todoApp = angular.module('todosApp', []);
    
            todoApp.factory('todoFactory', function ($http) {
                var factory = {};
    
                factory.getTodos = function () {
                    return $http.get("http://cdn.rawgit.com/motyar/bcf1d2b36e8777fd77d6/raw/bfa8bc0d2d7990fdb910927815a40b572c0c1078/out.xml");
                }
    
                return factory;
            });
            todoApp.factory('getXMLDataFactory', function() {
                
                var x2js = new X2JS(),
                    //xml ="<MyRoot><test>Success</test><test2><item>val1</item><item>val2</item></test2></MyRoot>";
    
                    xml = '<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">'+
     '<DocumentElement xmlns="">'+
      '<semt_kodlari diffgr:id="semt_kodlari1" msdata:rowOrder="0">'+
       '<semt_adi>ALTIKAT</semt_adi>'+
      '</semt_kodlari>'+
     '</DocumentElement>'+
    '</diffgr:diffgram>';
                console.log(xml, x2js);
                
                return {
                    get: function() { 
                        return x2js.xml_str2json(xml);
                   }
                };         
            });
            todoApp.controller('todosCtrl', function ($scope, todoFactory, getXMLDataFactory) {
    
                $scope.todos = [];
                //loadTodos();
                loadData();
                
                function loadTodos() {
                    todoFactory.getTodos().success(function (data) {
                        console.log(data);
                        courses = x2js.xml_str2json(data);
                        console.log(courses.books.course);
                        $scope.todos = courses.books.course;
                    });
                }
                
                function loadData() {
                    console.log('test');
                    $scope.todos = getXMLDataFactory.get()
                        .diffgram.DocumentElement.semt_kodlari;
                    console.log($scope.todos);
                }
            });
    <script src="http://demos.amitavroy.com/learningci/assets/js/xml2json.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="todosApp" ng-controller="todosCtrl">
         <h2>Parsing XML data with AngularJS</h2>
        {{todos|json}}
    </div>

    【讨论】:

    • 很抱歉,当从 http 获取 xml 文件时,我得到了同样的错误:/
    • 不知道你做错了什么没有看到你的代码。在这个fiddle 中,我使用$http 请求了一个XML 文件。我还发现transformResponse 非常方便将 xml 转换为 json。
    • @SercanSelçuk 在您的控制器上定义 $http 并检查您在 node_modules 或 bower_components 中的主要 index.html filex2js 模块文件中的导入。如果 index 中没有定义,则调用这两个文件&lt;script src="node_modules/.../x2js/xml2json.js"&gt;&lt;/script&gt; &lt;script src="node_modules/.../x2js/xml2json.min.js"&gt;&lt;/script&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2017-01-28
    • 2018-08-17
    相关资源
    最近更新 更多