可以在运行时使用 Objc/iPhone 代码针对 xsd 验证 xml
I have xml files that I read in at runtime, is it possible to validate the xml against an xsd file at runtime using Obj C?? This can be done in java and c#.. But i need do it run time in my iphone app.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

发布评论
评论(3)
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 命令,请尝试 /Developer/usr/bin/make (或您的
启动 XCode 并执行以下步骤:
5.1 选择“文件”->“新建项目”
5.2 在打开的对话框中选择“iOS Library”->“Cocoa Touch Static”
库”。单击“选择...”。5.3 在下一个对话框中,在“另存为”字段中输入 libxsde 并导航
到 xsde-3.2.0-i686-macosx 目录。点击“保存”。5.4 接下来您应该看到一个警告对话框,指出 libxsde 目录
已经存在。这是预期的结果,因此请单击“替换”。5.5 在项目窗口的“组和文件”列表中选择“其他
Sources”组,然后选择“Project”->“Add to Project...”。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 等)。在终端窗口中通过运行以下命令创建“胖”库
命令(可能需要根据配置进行调整)
您已经构建的):cd 构建
lipo -output libxsde.a -create Release-iphonesimulator/liblibxsde.a Release-iphoneos/liblibxsde.a
lipo -output libxsde-da -create Debug-iphonesimulator/liblibxsde.a Debug-iphoneos/liblibxsde.a
如果在某些时候您需要更改 XSD/e 配置,那么它是 最好的
从添加的文件集开始(上面的步骤 1)
XCode 项目的配置可能因配置而异。
构建运行时库后,将 XSD/e 集成到您的应用程序中
执行以下步骤:
使用 XSD/e 编译器 (xsde-3.2.0-i686-macosx/bin/xsde) 将架构编译为 C++
并将生成的 C++ 文件添加到您的项目中。要将您的应用程序链接到 XSD/e 运行时库 (libxsde),请执行
在您的项目中执行以下步骤:2.1 在“目标”组中,双击您的应用程序以打开
“信息”对话框。2.2 选择“常规”选项卡,然后单击加号 (+) 按钮添加
图书馆。2.3 在打开的对话框中单击“添加其他...”按钮并添加
上面创建的 libxsde.a 或 libxsde-da(调试)胖库。要将 XSD/e 运行时标头添加到应用程序的搜索路径,
在您的项目中执行以下步骤:3.1 选择“项目”->“编辑项目设置”、“构建”选项卡。在
“配置”下拉列表选择“所有配置”。3.2 向下滚动到“搜索路径”部分并将路径添加到
将 xsde-3.2.0-i686-macosx/libxsde 目录复制到“标题搜索路径”字段。3.3 构建应用程序。
iOS 的 objC Api 中没有为此提供的 sdks。为此,您必须直接使用 libxml 的 C API。
- 您加载 xml(例如 xmlReadMemory),
- 然后对于 XSD,您可以使用 xmlSchemaValidateDoc
或者您可以使用以下包装类 [免责声明:我是作者]:
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)
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我认为你不能在 iOS 上使用 Obj C 来做到这一点。我认为您需要使用 libxml2。
这是一个验证简单 C 程序的示例XML 与 XSD 的对比。
以下是有关将 libxml2 添加到 XCode 的说明项目。
I don't think you can do this using Obj C on iOS. I think you'll need to use 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.