2

サーバーからの応答を取得しようとしていました。サーバーは、リクエスト タイプに基づいて xml/json 形式でレスポンスを送信できます。

データが xml/json 形式であるかどうかを判断する方法、データが xml 形式である場合は、xml を json に変換し、json で処理を行うことができます。

データjsonを文字列化/解析化された形式で取得するため、内部のtry/catchは役に立ちません。

これを達成するための最良の方法は何ですか?デコードする前にデータが xml/json 形式かどうかを判断する方法はありますか?

よろしく、 -M-

4

2 に答える 2

4

これは古い投稿であることは知っていますが、偶然見つけました。残念ながら、Patrick の回答はあまり役に立ちませんでした。せいぜい、文字列が少なくとも XML を試みていたと判断するかもしれません。最悪の場合、スペースなどのプレフィックスが付けられている可能性があるため、一致するものさえ得られません。また、素晴らしい状況ではありません。 XML 自体は、タグが欠落しているなどの理由で、まだ有効ではありません。

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 に答える