【问题标题】:Validate xml/json before decoding in nodejs在 nodejs 中解码之前验证 xml/json
【发布时间】:2013-04-25 19:04:00
【问题描述】:

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

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

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

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

问候, -M-

【问题讨论】:

  • 假设它是有效的并尝试解码它。如果你发现一个错误,它是无效的。

标签: xml json node.js validation


【解决方案1】:

我知道这是一篇较旧的帖子,但我偶然发现了它,不幸的是,Patrick 的回答对我没有太大帮助。充其量,您可能会确定该字符串至少试图成为 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);

【讨论】:

    【解决方案2】:

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

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

    我的意思是毕竟它只是作为字符串接收的,如果它的 XML 或 json 格式,则应进行相应的格式化 json开头像“{” 并且 XML 应该以“

    【讨论】:

      猜你喜欢
      • 2012-04-18
      • 2020-08-16
      • 2017-07-05
      • 2018-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-12
      • 2022-11-10
      相关资源
      最近更新 更多