首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XML解析为JSON 8

将XML解析为JSON 8
EN

Stack Overflow用户
提问于 2018-06-07 08:51:36
回答 1查看 2.6K关注 0票数 3

我使用的是xml2js,因为我需要将XML转换为JSON。但是,当我接收到XML时,它将如预期的那样显示。但在解析之后。

我收到: as \ufffd或�。

我已经将编码设置为UTF-8,所以我不确定我做错了什么。谁能启发我:-)?

代码语言:javascript
复制
var fs = require('fs')
var https = require('https')
var xml2js = require('xml2js')
var parser = new xml2js.Parser()

router.get('/api/xml', (req, res) => {
  https.get('urlForRequest', function (response) {
    var response_data = '';     

    response.setEncoding('utf8');
    response.on('data', function (chunk) {
         response_data += chunk;             
    });
    response.on('end', function () {
      parser.parseString(response_data, function (err, result) {
        if (err) {
          console.log('Got error: ' + err.message);
        } else {
          res.json(result)
        }
      });
    });
    res.on('error', function (err) {
      console.log('Got error: ' + err.message);
    })
  })
})

更新:

我试着跟随你的脚步。如果我获取XML并将其本地存储在.xml文件中,那么一切都很好。但是,如果我从我的源(完全相同的GET请求)获取它,那么它就不能工作。

curl http://localhost:9090/products.xml -v > download.xml响应

代码语言:javascript
复制
Connected to localhost (::1) port 9090 (#0)
GET /products.xml HTTP/1.1
Host: localhost:9090
User-Agent: curl/7.54.0
Accept: */*

HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Thu, 07 Jun 2018 09:56:41 GMT
ETag: W/"9471b6-163d9ad4696"
Content-Type: text/xml; charset=UTF-8
Content-Length: 9728438
Date: Thu, 07 Jun 2018 10:00:09 GMT
Connection: keep-alive

回复curl到“真实”源(这是https请求,如果有关系的话)

代码语言:javascript
复制
User-Agent: curl/7.54.0
Accept: */*

HTTP/1.1 200 OK
Date: Thu, 07 Jun 2018 10:10:29 GMT
Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips PHP/5.4.16
X-Powered-By: PHP/5.4.16
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/xml; charset=iso-8859-1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 09:45:12

我设置了一些脚本文件来复制你的结果。从我所能看到的情况来看,一切似乎都正常。

我已经创建了一个快速服务器来提供一个静态XML文件,其中包含了奥斯字符。这总是一个从这些问题开始,孤立问题的好地方。

server.js

代码语言:javascript
复制
const express = require("express");
const app = express();
const port = 3000;

app.use('/', express.static(__dirname));
app.listen(port);

console.log('Express started on port ' + port + '...');

index.js

代码语言:javascript
复制
const xml2js = require('xml2js')
const parser = new xml2js.Parser()
const http = require('http');

var url = 'http://localhost:3000/test.xml';

http.get(url, (response) => {

    var response_data = '';     
    // Try latin1 encoding.
    response.setEncoding('latin1');
    response.on('data', function (chunk) {
         response_data += chunk;             
    });
    response.on('end', function () {
      parser.parseString(response_data, function (err, result) {
        if (err) {
          console.log('Got error: ' + err.message);
        } else {
          console.log('Result JSON: ', JSON.stringify(result, null, 4));
        }
      });
    });

});

test.xml

代码语言:javascript
复制
<root>
    <testÅØ id="198787">
    </testÅØ>
</root>

所有文件都在同一个目录中。启动server.js然后启动index.js,这将下载测试xml文件并显示解析的结果。使用我的设置,我得到了以下输出:

代码语言:javascript
复制
{
    "root": {
        "testÅØ": [
            {
                "$": {
                    "id": "198787"
                }
            }
        ]
    }
}

我想知道原始XML文件是否有问题。我试着用curl下载数据,看看文件是什么样子。

卷曲urlForRequest -v > download.xml

我会检查头像回来,我得到

代码语言:javascript
复制
curl http://localhost:3000/test.xml -v > download.xml

HTTP/1.1 200 OK
X-Powered-By: Express
Accept-Ranges: bytes
Cache-Control: public, max-age=0
Last-Modified: Thu, 07 Jun 2018 09:10:31 GMT
ETag: W/"34-163d982ff58"
Content-Type: text/xml; charset=UTF-8
Content-Length: 52
Date: Thu, 07 Jun 2018 09:52:46 GMT
Connection: keep-alive

为了我的设计。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50736919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档