2017-04-22 136 views
0

我是angular2的新手,希望将XML转换为json。我使用get方法来接收它。每当我直接在json接收数据时发布我。Angular2:获取XML数据并将其转换为JSON

请帮助我的工作示例。下面是我的XML

<?xml version="1.0"?> 
 
<catalog> 
 
    <book id="bk101"> 
 
     <author>Gambardella, Matthew</author> 
 
     <title>XML Developer's Guide</title> 
 
     <genre>Computer</genre> 
 
     <price>44.95</price> 
 
     <publish_date>2000-10-01</publish_date> 
 
     <description>An in-depth look at creating applications 
 
     with XML.</description> 
 
    </book> 
 
    <book id="bk102"> 
 
     <author>Ralls, Kim</author> 
 
     <title>Midnight Rain</title> 
 
     <genre>Fantasy</genre> 
 
     <price>5.95</price> 
 
     <publish_date>2000-12-16</publish_date> 
 
     <description>A former architect battles corporate zombies, 
 
     an evil sorceress, and her own childhood to become queen 
 
     of the world.</description> 
 
    </book> 
 
    <book id="bk103"> 
 
     <author>Corets, Eva</author> 
 
     <title>Maeve Ascendant</title> 
 
     <genre>Fantasy</genre> 
 
     <price>5.95</price> 
 
     <publish_date>2000-11-17</publish_date> 
 
     <description>After the collapse of a nanotechnology 
 
     society in England, the young survivors lay the 
 
     foundation for a new society.</description> 
 
    </book> 
 
    <catalog>

+0

你说的'问题,我在JSON directly.'每次我收到的数据,如果你已经收到JSON数据,为什么你需要解析XML? – Dummy

+0

https://github.com/Leonidas-from-XIV/node-xml2js – cartant

+0

@Dummy这次我想出了具有XML数据而不是JSON的Web服务 – Jay

回答

0
function parse(xmlDoc) { 
    var result = { catalog: [] }; 
    var books = xmlDoc.getElementsByTagName("book"); 
    for (var i = 0; i < books.length; i++) { 
     var book = {}; 
     book.id = books[i].getAttribute("id"); 
     book.author = books[i].getElementsByTagName("author")[0].textContent; 
     book.title = books[i].getElementsByTagName("title")[0].textContent; 
     book.author = books[i].getElementsByTagName("author")[0].textContent; 
     book.genre = books[i].getElementsByTagName("genre")[0].textContent; 
     book.price = books[i].getElementsByTagName("price")[0].textContent; 
     book[publish_date] = books[i].getElementsByTagName("publish_date")[0].textContent; 
     book.description = books[i].getElementsByTagName("description")[0].textContent; 
     result.catalog.push(book); 
    } 
    return result; 
} 
0

我宁愿与NPM模块,而不是使用Javascript,因为

这是打字稿& JavaScript不 同时担任该会的工作,但在去做一个构建或分配它不会工作,因为它会给出错误xml2json没有被定义,因为它只在javascript中可用&不在TS或在转译时(发生在我的情况) 我做了这样的事情。

var parser = new xml2js.Parser({explicitArray : false}); 
//used xml2js parser from npm (https://www.npmjs.com/package/xml2js) 
//and in my service i used this 
this.http.get(this.newsURL) 
       .flatMap(res=>{ 
         return Observable.fromPromise(this.getJSON(res.text())) 
       }) 
       .catch((error:any) => Observable.throw(error.json().error || 'Server error')); 

编辑:

this.getJSON()是其将XML的()的函数> JSON。

getJSON(xmlText){ 
    return new Promise(function(resolve,reject){ 
     parser.parseString(xmlText,function(err,result){ 
      if(!err){ 
       resolve(result.rss.channel.item); 
      }else{ 
       reject(err); 
      } 
     }) 
    }) 
    } 

而且需要进口

var xml2js = require('xml2js'); 
var parser = new xml2js.Parser({explicitArray : false}); 
+0

我应该在哪里写这段代码“var parser = new xml2js.Parser({explicitArray:false});“ – Jay

+0

@Jay:在你的http调用返回XML的服务方法。这里'this.newsURL'是http URL。 –

+0

我应该通过那里面的任何外观事件像ngOnInit – Jay

相关问题