2015-06-24 30 views
0

我試着讓this example使用xml作爲json數據。但我有一些關於這些代碼的問題。Angular x2js xml沒有定義

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'。那麼有人能告訴我我的代碼有什麼問題嗎?對於課程和課程有什麼不同?

回答

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>

+0

太謝謝你了:)) –

+0

我很抱歉,但如果從HTTP GET xml文件,我得到了同樣的錯誤:/ –

+0

不知道你在做什麼毛病出看你的代碼。在[fiddle](http://jsfiddle.net/awolf2904/567rbjk8/3/)中,我用'$ http'對XML文件進行了請求。我還發現'transformResponse'非常方便將xml轉換爲json。 – AWolf