iPhone中的XSLT版本

til*_*lda 14 iphone xslt cocoa-touch

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

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

rpi*_*ing 15

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

  1. 下载libxslt的源代码并解压缩.
  2. 将"libxslt"目录添加到构建设置中的标题搜索路径.另外,在那里添加libxml-headers的路径(通常/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2).
  3. 将libxml2.2.dylib和libxslt.dylib添加到链接框架(Xcode"Groups&Files"面板:右键单击"Frameworks" - >"Add" - >"Existing Frameworks ...").
  4. 创建一个简单的XML文件及其XSL转换.

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

#import <libxml/xmlmemory.h>
#import <libxml/debugXML.h>
#import <libxml/HTMLtree.h>
#import <libxml/xmlIO.h>
#import <libxml/xinclude.h>
#import <libxml/catalog.h>
#import <libxslt/xslt.h>
#import <libxslt/xsltInternals.h>
#import <libxslt/transform.h>
#import <libxslt/xsltutils.h>

...

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();
Run Code Online (Sandbox Code Playgroud)

  • iPhone上不允许使用dylib.你需要创建一个静态库 (2认同)

Chr*_*ert 7

正如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. (2认同)

Gor*_*son 5

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

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

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