2009-12-08 3 views
2

У меня есть XML и XML-схема в локальном xsd-файле. XML-документ не содержит никакой информации о схеме. Я хочу проверить документ XML на файл схемы xsd в Cocoa (это означает, что я предпочел бы что-то NS/CF/libxml, а не внешнюю библиотеку).Подтвердить XML-схему с файлом xsd в какао?

Я могу через xmllint, что, вероятно, сработает, но я искал способ сделать это, не открывая внешнюю задачу.

ответ

3

Если XML-документ не имеет ссылка на xml-схему, вы ld добавьте его самостоятельно, затем выполните проверку с помощью метода NSXMLDocument validateAndReturnError:.

Вот пример того, как настроить документ xml для ссылки на xsd. Очевидно, вам придется адаптировать этот код, чтобы иметь ссылку на ваш локальный файл xsd.

NSError *error = nil; 
NSURL *xmlURL = [NSURL URLWithString:@"http://www.xmlschema.info/PO.xml"]; 

NSXMLDocument *document = [[NSXMLDocument alloc] initWithContentsOfURL:xmlURL options:NSXMLNodeOptionsNone error:NULL]; 

NSXMLNode *noNamespaceSchemaLocation = [NSXMLNode attributeWithName:@"xsi:noNamespaceSchemaLocation" stringValue:@"http://www.xmlschema.info/PO.xsd"]; 
NSXMLElement *rootElement = [document rootElement]; 
NSMutableArray *rootAttributes = [[rootElement attributes] mutableCopy]; 
[rootAttributes replaceObjectAtIndex:1 withObject:noNamespaceSchemaLocation]; 
[rootElement setAttributes:rootAttributes]; 

BOOL isValid = [document validateAndReturnError:&error]; 

if (isValid) 
    NSLog(@"document is valid"); 
else 
    NSLog(@"document is invalid: %@", [error localizedDescription]); 
2

Ну, xmllint является одним из инструментов libxml. Часть проверки XSD xmllint - это просто небольшая обертка вокруг модуля схемы libxml - вы можете увидеть API here. Я сам использовал это у Какао.

1

Ньютон является правильным. У меня есть код с открытым кодом Cocoa, который использует API-интерфейс libxml XSD.

Проект находится здесь:

http://code.google.com/p/cocoatron/

В частности, этот метод:

- (void)doXSDValidation:(xmlDocPtr)source; 

В этом файле:

http://code.google.com/p/cocoatron/source/browse/trunk/ValidateXMLDocuments/Validate%20XML%20Documents.m

Смежные вопросы