2

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

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

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

现在实现这一目标的最佳方法是什么?有没有办法在解码前判断数据是否为xml/json格式?

问候,-M-

4

2 回答 2

4

我知道这是一篇较旧的帖子,但我遇到了它,不幸的是,帕特里克的回答对我没有太大帮助。充其量,您可能会确定该字符串至少试图成为 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);
于 2014-01-02T16:54:29.343 回答
1

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

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

我的意思是毕竟它只是作为字符串接收,如果它的 XML 或 json json 以 "{" 开头并且 XML 应该以 "

于 2013-05-01T18:34:42.350 回答