在nodejs中解码之前验证xml / json

时间:2013-05-01 18:21:13

标签: xml json node.js validation

我试图从某个服务器获取响应。服务器可以根据请求类型以xml / json格式发送响应。

现在我如何确定数据是否采用xml / json格式,如果数据是xml格式,那么我可以将xml转换为json并在json上进行处理。

在try / catch内部对我没有帮助,因为我得到数据json的字符串化/解析格式。

现在实现这一目标的最佳方法是什么?在解码之前是否有蚂蚁方法来确定数据是否为xml / json格式?

此致 -M -

2 个答案:

答案 0 :(得分:3)

我知道这是一篇较老的帖子,但我遇到了它,不幸的是,帕特里克的答案对我来说并不是很有帮助。充其量,你可以确定该字符串至少是试图成为XML,更糟糕的是,你甚至不会得到匹配,因为它可能已经以空格为前缀等。也不是很好的情况,是找出由于缺少标记等,XML本身仍然无效,这似乎是OP的全部要点。

我发现libxmljs是您正在寻找的最佳解决方案。您可以解析,验证基本字符串以及详细结构。

检查XML语法的一个例子是:

program.isValidSyntaxStructure = function (text) {
    try {
        libxmljs.parseXml(text);
    } catch (e) {
        return false;
    }

    return true;
};

检查特定结构/模式的示例如下:

var xsd = '<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="comment" type="xs:string"/></xs:schema>';
var xml_valid = '<?xml version="1.0"?><comment>A comment</comment>';
var xml_invalid = '<?xml version="1.0"?><commentt>A comment</commentt>';

var xsdDoc = libxml.parseXml(xsd);
var xmlDocValid = libxml.parseXml(xml_valid);
var xmlDocInvalid = libxml.parseXml(xml_invalid);

assert.equal(xmlDocValid.validate(xsdDoc), true);
assert.equal(xmlDocInvalid.validate(xsdDoc), false);

答案 1 :(得分:0)

如果它具有正确的XML格式,可能只是一个快速的字符串搜索?

if (request.indexOf("<?xml") != -1) {
   parse xml object...
}
else {
   parse json object...
}

我的意思是它毕竟只是作为一个字符串接收,如果它的XML或json应该相应地格式化 json起始像“{” 和XML应该像“