我试图从某个服务器获得响应。服务器可以根据请求类型以 xml/json 格式发送响应。
现在我如何确定数据是否为 xml/json 格式,如果数据为 xml 格式,那么我可以将 xml 转换为 json 并对 json 进行处理。
内部 try/catch 对我没有帮助,因为我得到了字符串化/解析格式的数据 json。
现在实现这一目标的最佳方法是什么?有没有办法在解码前判断数据是否为xml/json格式?
问候,-M-
我试图从某个服务器获得响应。服务器可以根据请求类型以 xml/json 格式发送响应。
现在我如何确定数据是否为 xml/json 格式,如果数据为 xml 格式,那么我可以将 xml 转换为 json 并对 json 进行处理。
内部 try/catch 对我没有帮助,因为我得到了字符串化/解析格式的数据 json。
现在实现这一目标的最佳方法是什么?有没有办法在解码前判断数据是否为xml/json格式?
问候,-M-
我知道这是一篇较旧的帖子,但我遇到了它,不幸的是,帕特里克的回答对我没有太大帮助。充其量,您可能会确定该字符串至少试图成为 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);
如果它具有正确的 XML 格式,也许只是一个快速的字符串搜索?
if (request.indexOf("<?xml") != -1) {
parse xml object...
}
else {
parse json object...
}
我的意思是毕竟它只是作为字符串接收,如果它的 XML 或 json json 以 "{" 开头并且 XML 应该以 "