3

iOSのXSDに対してXMLファイルを検証したい。ドキュメントはこれを行うためにNSXMLDocumentを使用することをほのめかしていますが、iOSでは利用できません=(。iOSでこれを行うための軽量の代替手段はありますか?

4

3 に答える 3

3

libxml2のライブラリはすでにiOSに含まれているので、私はlibxml2の検証機能を使用することになりました。このサンプルコードに従う

#include <libxml/parser.h>
#include <libxml/xmlschemas.h>

int is_valid(const xmlDocPtr doc, const char *schema_filename)
{
    xmlDocPtr schema_doc = xmlReadFile(schema_filename, NULL, XML_PARSE_NONET);
    if (schema_doc == NULL) {
        /* the schema cannot be loaded or is not well-formed */
        return -1;
    }
    xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt(schema_doc);
    if (parser_ctxt == NULL) {
        /* unable to create a parser context for the schema */
        xmlFreeDoc(schema_doc);
        return -2;
    }
    xmlSchemaPtr schema = xmlSchemaParse(parser_ctxt);
    if (schema == NULL) {
        /* the schema itself is not valid */
        xmlSchemaFreeParserCtxt(parser_ctxt);
        xmlFreeDoc(schema_doc);
        return -3;
    }
    xmlSchemaValidCtxtPtr valid_ctxt = xmlSchemaNewValidCtxt(schema);
    if (valid_ctxt == NULL) {
        /* unable to create a validation context for the schema */
        xmlSchemaFree(schema);
        xmlSchemaFreeParserCtxt(parser_ctxt);
        xmlFreeDoc(schema_doc);
        return -4; 
    }
    int is_valid = (xmlSchemaValidateDoc(valid_ctxt, doc) == 0);
    xmlSchemaFreeValidCtxt(valid_ctxt);
    xmlSchemaFree(schema);
    xmlSchemaFreeParserCtxt(parser_ctxt);
    xmlFreeDoc(schema_doc);
    /* force the return value to be non-negative on success */
    return is_valid ? 1 : 0;
}
于 2012-10-16T03:10:05.360 に答える
0

Objective Cで行うのは必ずしも簡単ではないようですが、このSOの質問にはいくつかのアイデアがリストされています。実行時にObjc/iPhoneコードを使用してxsdに対してxmlを検証することが可能

CodeSynthesisはここでこれをサポートしているようです:http ://wiki.codesynthesis.com/Using_XSDE_in_iPhone_Applications

ただし、この時点では、StackOverflowの質問からリンクやアイデアを引き出しているだけです。

于 2012-06-22T20:38:25.710 に答える
0

一般的なスキーマバリデーターはありません。上記で提案したようにXSDEを使用してみてください。それは非常に高速で、非常に信頼性があります。

素晴らしいチュートリアルはここにあります:http://amateuritsolutions.blogspot.hu/2012/10/validate-xsd-schema-in-your-ios.html

于 2012-10-14T10:32:05.173 に答える