xml - 如何从消耗xml的node js请求中读取xml

标签 xml node.js post

我将 Node 中的 post 方法公开为

function onRequest(request, response) {
    var postData='';
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    if(request.method==="POST"){
        request.setEncoding("utf8");
        console.log('in post');
        request.addListener("data", function(postDataChunk) {
            postData += postDataChunk;
            console.log("Receiving POST data chunk '"+postDataChunk + "'.");
        });
        request.addListener("end", function() {
           console.log("Received POST data ");
           console.log(postData);
        });    
    }
}

我希望控制台日志是 xml 字符串。

<ContainerItem>
          <Id>Id</Id>
          <Name>Name</Name>
          <Description>Description</Description>
          <Type>Type</Type>
  </ContainerItem>

但它给我的输出为:

text=%3CContainerItem%3E%0D%0A++++++++++%3CId%3EId%3C%2FId%3E%0D%0A++++++++++%3CName%3EName%3C%2FName%3E%0D%0A++++++++++%3CDescription%3EDescription%3C%2FDescription%3E%0D%0A++++++++++%3CType%3EType%3C%2FType%3E%0D%0A%3C%2FContainerItem%3E

如何将其作为 XML 字符串获取?这样我就可以使用 xml2js 库解析它。

最佳答案

数据以querystring格式接收,接收时是URL编码的,所以需要解码。您可以使用 native query string用于此目的的模块:

var qs = require('querystring');
var str = 'text=%3CContainerItem%3E%0D%0A++++++++++%3CId%3EId%3C%2FId%3E%0D%0A++++++++++%3CName%3EName%3C%2FName%3E%0D%0A++++++++++%3CDescription%3EDescription%3C%2FDescription%3E%0D%0A++++++++++%3CType%3EType%3C%2FType%3E%0D%0A%3C%2FContainerItem%3E';

var xml = qs.parse(str);
// data.text

已解析的查询字符串现在位于一个对象中,因此您现在可以将 data.text 传递给 XML 解析器:

var parseString = require('xml2js').parseString;
parseString(xml, function(err, result) {
  // parsed XML is in result
});

关于xml - 如何从消耗xml的node js请求中读取xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19155181/

相关文章:

java - 如何用java生成DTD文件

xml - 在 R 中解析 iTunes RSS

node.js - 我是否需要在 NodeJS 中进行依赖注入(inject),或者如何处理...?

node.js - 如何创建将其他包分组的 npm 包?

PHP 安全 : send POST to same URL = bad?

java - JAXB 未检测到元素

ios - iTunes 资料库 "Distinguished Kind"

node.js - 服务器端的客户端证书验证,DEPTH_ZERO_SELF_SIGNED_CERT 错误

java - 通过 POST 正文发送复杂对象(带有 Map)- JSON

http - HTTP 响应(而非请求)中 GET 和 POST 的区别