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