答案 0 :(得分:6)
我不认为你可以在iOS上使用Obj C来做到这一点。我认为您需要使用libxml2。
Here's an example of a simple C program that validates XML against XSD.
Here are instructions on adding libxml2 to an XCode project.
答案 1 :(得分:1)
CodeSynthesis XSD/e 应该支持iPhone(在Mac包内)
编辑#1:设置说明
要构建XSD / e运行时库(libxsde.a),请执行以下步骤:
为Mac OS X打开预编译的XSD / e包。
启动新的终端窗口并运行以下命令:
cd xsde-3.2.0-i686-macosx
cp etc/ios/config-xcode.make config/config.make
请勿关闭终端。
修改config/config.make
并调整XSD / e配置以适合您的需要
要求。
在终端中,执行:
cd libxsde
make
如果找不到make命令,请尝试/ Developer / usr / bin / make(或者你的 替代XCode安装目录)。
启动XCode并执行以下步骤:
5.1选择“文件” - >“新建项目”
5.2在打开的对话框中选择“iOS Library” - >“Cocoa Touch Static 图书馆“。点击”选择...“。
5.3在下一个对话框中,在“另存为”字段中键入libxsde并导航 到xsde-3.2.0-i686-macosx目录。点击“保存”。
5.4接下来,您应该看到一个警告对话框,说明libxsde目录 已经存在。这是预期的,所以单击“替换”。
5.5在“Groups& Files”列表的项目窗口中,选择“Other 来源“分组,然后选择”项目“ - >”添加到项目...“。
5.6在打开的对话框中,导航到xsde-3.2.0-i686-macosx / libxsde目录并 选择src目录。点击“添加”。
5.7在下一个对话框中,保留默认设置并单击“添加”。现在 你应该看到中列出的多个源文件(.cxx和.c) “其他来源”组。
5.8接下来选择“项目” - >“编辑项目设置”,“构建”选项卡。在里面 “配置”下拉列表选择“所有配置”。
5.9向下滚动到“搜索路径”部分并添加。 (点)到 “标题搜索路径”字段。
5.10向下滚动到“GCC 4.2 - 语言”部分并添加 -fvisibility =“其他C标志”字段的隐藏标志 作为-fvisibility = hidden和-fvisibility-inlines-hidden标志 到“其他C ++标志”字段。如果您设置任何额外的C / C ++标志 在您的应用程序的项目中,您可能还想在此处添加它们。
5.11为所有需要的配置构建项目(例如, 调试/发布,设备/模拟器,ARMv6 / ARMv7等)。
在终端窗口中,运行以下命令创建“fat”库 命令(可能需要根据配置进行调整) 你已经建立了):
cd build
lipo -output libxsde.a -create Release-iphonesimulator/liblibxsde.a Release-iphoneos/liblibxsde.a
lipo -output libxsde-d.a -create Debug-iphonesimulator/liblibxsde.a Debug-iphoneos/liblibxsde.a
如果在某些时候您需要更改XSD / e配置,那么最好 从添加的文件集开始,从头开始(上面的步骤1) XCode项目可能因配置而异。
构建运行时库后,将XSD / e集成到应用程序中 执行以下步骤:
使用XSD / e编译器将模式编译为C ++(xsde-3.2.0-i686-macosx / bin / xsde) 并将生成的生成的C ++文件添加到项目中。
要将您的应用程序链接到XSD / e运行时库(libxsde),请执行 项目中的以下步骤:
2.1在“目标”组中,双击您的应用程序以打开 “信息”对话框。
2.2选择“常规”选项卡,然后单击加号(+)按钮添加 库。
2.3在打开的对话框中,单击“添加其他...”按钮并添加其中一个 上面创建的libxsde.a或libxsde-d.a(调试)胖库。
要将XSD / e运行时标头添加到应用程序的搜索路径, 在您的项目中执行以下步骤:
3.1选择“项目” - >“编辑项目设置”,“构建”选项卡。在里面 “配置”下拉列表选择“所有配置”。
3.2向下滚动到“搜索路径”部分,然后添加路径 xsde-3.2.0-i686-macosx / libxsde目录到“Header Search Paths”字段。
3.3构建应用程序。
答案 2 :(得分:1)
在iOS的objC Api中没有这方面的问题。要做到这一点,你必须直接使用libxml的C API。
或者您可以使用以下包装类[免责声明:我是作者]:
DDXMLValidator(我的助手@ https://github.com/Daij-Djan/DDUtils/的一部分)
//validate
NSError *error = nil;
NSURL *schemaURL = [[NSBundle mainBundle] URLForResource:@"XMLSchema" withExtension:@"xsd"];
if(![[SNXMLValidator sharedInstace] validateXMLData:xmlData withSchema:SNXMLValidatorSchemaTypeXSD schemaFile:schemaURL error:&error]) {
DebugLog(@"Failed to validate data: %@", error);
}
该类可以执行DTD,XSD,RelaxNG(它只包装libxml2)