ажити файл виводиться відповідне повідомлення за допомогою функції fl_alert ();
Далі створюється вказівним контекст парсера схеми, і також виводиться повідомлення про помилку при неможливості його створення:
xmlSchemaParserCtxtPtr parser_ctxt = xmlSchemaNewDocParserCtxt (schema_doc);
if (parser_ctxt == NULL) {_alert ("Unable to create a parser context for the schema", "Ok"); (schema_doc);
return - 2;
}
Потім сама схема перевіряється на коректність і також видається повідомлення про помилку при знаходженні помилок у схемі:
xmlSchemaPtr schema = xmlSchemaParse (parser_ctxt);
if (schema == NULL) {_alert ("the schema itself is not valid", "Ok"); (parser_ctxt); (schema_doc);
return - 3;
}
Після цього створюється контекст перевірки: valid_ctxt = xmlSchemaNewValidCtxt (schema);
if (valid_ctxt == NULL) {_alert ("unable to create a validation context for the schema", "Ok"); (schema); (parser_ctxt);
xmlFreeDoc (schema_doc); - 4;
}
І нарешті, відбувається перевірка XML документа:
int is_valid = (xmlSchemaValidateDoc (valid_ctxt, doc) == 0); (valid_ctxt); (schema); (parser_ctxt); (schema_doc);
return is_valid? 1: 0;
У разі, якщо завантажується XML документ має помилки, то виконується наступний код:
xmlErrorPtr XMLError;
XMLError = xmlGetLastError ();
fl_alert (XMLError-> message);
Тут ми створюємо покажчик покажчик на структуру XMLError, заносимо в цю структуру відомості про останню помилку, і потім видаємо повідомлення про помилку за допомогою функції fl_allert ();.
Якщо перевірка XML файлу пройшла успішно, то виконується наступний код:
xmlDocPtr xmldoc = NULL; ((xmldoc = xmlReadFile (filename, NULL, 0)) == NULL) return; cur = xmlDocGetRootElement (xmldoc); (xmldoc, "style", "entry" ;); (xmldoc, "keywords", "keyword"); (xmldoc, "types", "type"); (uri); (color); (font);
Тут ми створюємо покажчик на XML документ, завантажуємо його з файлу, отримуємо покажчик на кореневий елемент документа і заповнюємо таблицю стилів даними з XML документа за допомогою функції parseXMLDoc (xmlDocPtr doc, char * nodeName, char * curNode ). Ця функція викликається 3 рази: для читання даних підсвічування, для отримання списку ключових слів і списку типів. Розглянемо цю функцію детальніше: parseXMLDoc (xmlDocPtr doc, char * nodeName, char * curNode)
{cur; = xmlDocGetRootElement (doc);
cur = cur-> xmlChildrenNode; (cu...