当前位置:  开发笔记 > 编程语言 > 正文

iPhone中的XSLT版本

如何解决《iPhone中的XSLT版本》经验,为你挑选了3个好方法。

我打算在我的iPhone应用程序中使用XML/XSLT.

iPhone目前支持哪个版本的XSLT?我可以使用XSLT 2.0还是只使用1.0?



1> rpitting..:

使用libxslt在iPhone OS其实很简单:

    下载libxslt的源代码并解压缩.

    将"libxslt"目录添加到构建设置中的标题搜索路径.另外,在那里添加libxml-headers的路径(通常/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2).

    将libxml2.2.dylib和libxslt.dylib添加到链接框架(Xcode"Groups&Files"面板:右键单击"Frameworks" - >"Add" - >"Existing Frameworks ...").

    创建一个简单的XML文件及其XSL转换.

最后,您可以使用类似于上面示例的代码将转换结果转换为NSString(例如,以a显示UIWebView):

#import 
#import 
#import 
#import 
#import 
#import 
#import 
#import 
#import 
#import 

...

NSString* filePath = [[NSBundle mainBundle] pathForResource: @"article" ofType: @"xml"];
NSString* styleSheetPath = [[NSBundle mainBundle] pathForResource: @"article_transform" ofType:@"xml"];

xmlDocPtr doc, res;

// tells the libxml2 parser to substitute entities as it parses your file
xmlSubstituteEntitiesDefault(1);
// This tells libxml to load external entity subsets
xmlLoadExtDtdDefaultValue = 1;

sty = xsltParseStylesheetFile((const xmlChar *)[styleSheetPath cStringUsingEncoding: NSUTF8StringEncoding]);
doc = xmlParseFile([filePath cStringUsingEncoding: NSUTF8StringEncoding]);
res = xsltApplyStylesheet(sty, doc, NULL);

char* xmlResultBuffer = nil;
int length = 0;

xsltSaveResultToString(&xmlResultBuffer, &length, res, sty);

NSString* result = [NSString stringWithCString: xmlResultBuffer encoding: NSUTF8StringEncoding];

NSLog(@"Result: %@", result);

free(xmlResultBuffer);

xsltFreeStylesheet(sty);
xmlFreeDoc(res);
xmlFreeDoc(doc);

xsltCleanupGlobals();
xmlCleanupParser();


iPhone上不允许使用dylib.你需要创建一个静态库

2> Chris Gilber..:

正如Lou Franco所指出的那样,iPhone上不允许使用dylib.

它在模拟器和手机中都可以正常开发,但是一旦你将它提交给Apple批准它就会被拒绝.我的应用程序在大约20分钟内被拒绝,可能是他们的自动静态分析工具.

相反,下载源代码,将其添加到项目中,链接LibXML2.2.dylib(不要问我为什么允许这个dylib但是XSLT不是!)并构建项目.这几乎是你所要做的.感谢Lou,因为正是他指出了我正确的方向.


用libxslt头疼吗? - 在某种程度上是的,但它并非不可克服.您可以做的最好的事情是下载LIBXSLT的源代码,并在Xcode项目的文件夹中包含40个左右的文件(20 .m和20 .h文件).一旦你添加了libxml2.2.dylib(奇怪的是这个dylib是可以接受的!)框架,LIBXSLT的源代码将被编译为主项目的一部分,你的应用程序被拒绝就没有问题了.使用不受支持的API.

3> Gordon Wilso..:

我担心xslt的情况相当严峻.该NSXMLDocument班将做到这一点的方式,但苹果把它从iPhone.

TouchXML计划支持xslt,但还没有.

我所知道的唯一选择是直接使用libxslt,它支持xslt 1.0和一些exslt扩展.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有