Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iPhone中XSLT的版本_Iphone_Cocoa Touch_Xslt - Fatal编程技术网

iPhone中XSLT的版本

iPhone中XSLT的版本,iphone,cocoa-touch,xslt,Iphone,Cocoa Touch,Xslt,我计划在iPhone应用程序中使用XML/XSLT iPhone目前支持哪一版本的XSLT?我可以使用XSLT 2.0还是仅使用XSLT 1.0?恐怕XSLT的形势相当严峻。NSXMLDocument类将是实现这一点的方法,但苹果从iPhone中推出了它 计划提供xslt支持,但还没有 我知道的唯一选择是直接使用,它支持xslt 1.0和一些扩展。在iPhone操作系统上使用libxslt实际上非常简单: 然后把它提取出来 在构建设置中将“libxslt”目录添加到标题搜索路径中。另外,在那里添

我计划在iPhone应用程序中使用XML/XSLT


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

恐怕XSLT的形势相当严峻。
NSXMLDocument
类将是实现这一点的方法,但苹果从iPhone中推出了它

计划提供xslt支持,但还没有


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

在iPhone操作系统上使用
libxslt
实际上非常简单:

  • 然后把它提取出来
  • 在构建设置中将“libxslt”目录添加到标题搜索路径中。另外,在那里添加libxml头的路径(通常是
    /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2
  • 将libxml2.2.dylib和libxslt.dylib添加到链接的框架(Xcode“组和文件”面板:右键单击“框架”->“添加”->“现有框架…”)
  • 创建一个简单的XML文件及其XSL转换
  • 最后,您可以使用类似于上述示例的代码将转换结果转换为
    NSString
    (例如,在
    UIWebView
    中显示):

    #导入
    #进口
    #进口
    #进口
    #进口
    #进口
    #进口
    #进口
    #进口
    #进口
    ...
    NSString*文件路径=[[NSBundle mainBundle]路径资源:@“article”类型:@“xml”];
    NSString*styleSheetPath=[[NSBundle mainBundle]pathForResource:@“article_transform”,类型:@“xml”];
    xmlDocPtr文件,res;
    //告诉libxml2解析器在解析文件时替换实体
    XMLSubstituteEntitysDefault(1);
    //这将告诉libxml加载外部实体子集
    xmlLoadExtDtdDefaultValue=1;
    sty=xsltParseStylesheetFile((const xmlChar*)[styleSheetPath cStringUsingEncoding:NSUTF8StringEncoding]);
    doc=xmlParseFile([filePath cStringUsingEncoding:NSUTF8StringEncoding]);
    res=xsltaplystylesheet(sty,doc,NULL);
    char*xmlResultBuffer=nil;
    整数长度=0;
    xsltsaveresultostring(&xmlsultbuffer,&length,res,sty);
    NSString*result=[NSString stringWithCString:xmlResultBuffer编码:NSUTF8StringEncoding];
    NSLog(@“结果:%@”,结果);
    免费(xmlResultBuffer);
    xsltFreeStylesheet(sty);
    xmlFreeDoc(res);
    xmlFreeDoc(doc);
    xsltCleanupGlobals();
    xmlcleanuparser();
    
    正如Lou Franco指出的那样,iPhone上不允许使用DYLIB

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


    相反,下载源代码,将其添加到项目中,链接LibXML2.2.dylib(不要问我为什么允许这个dylib,但是XSLT不允许!),然后构建项目。这就是你所要做的。这要归功于卢,因为他为我指明了正确的方向。

    即使你自己编译并构建libxslt,也不能在iPhone上使用它。我已经这样做了,我的应用程序被多次拒绝。AppReview进程使用的工具不区分代码中的静态链接符号和iOS中的动态链接符号。换句话说,如果看起来您正在使用libxslt,您的应用程序将被拒绝,因为appstore无法判断您是否正在使用私有API

    对于所有更新到XCode 5+iOS7 baseSDK的人,您会注意到,如果您在项目中包含
    libxslt-1.1.26
    ,并从源代码处编译,那么它使用的是以前版本的
    libxml
    。在最新的基本SDK中,
    libxml
    已经更新,因此您需要更新到
    libxslt-1.1.28

    下载最新的
    .tar.gz
    文件时,第一次需要包含在项目中的所有内容包括:

    • config.h
    • libxslt/*.h
    • libxslt/*.c
    但是,
    config.h
    libxslt/xsltconfig.h
    还不存在。它们有
    .in
    后缀。你需要运行
    /configure
    脚本,或者如果这对你来说不起作用,那么就像我一样作弊

    步骤1-0差异

    只需在中创建一个名为config.h的新副本

    步骤2-12差异

    只需创建一个名为
    libxslt/xsltconfig.h
    libxslt/xsltconfig.h
    的新副本

    前四个变化只是版本号

  • #定义LIBXSLT\u版本“1.1.28”
  • #定义LIBXSLT\u版本10128
  • \define LIBXSLT\u VERSION\u STRING“10128”
  • #定义LIBXSLT\u版本\u额外“-GITv1.1.28”
  • 接下来的四个

  • #if@WITH_XSLT_DEBUG@
    ->
    #if 1
    //只需将
    @替换为
    WITH
    1
  • #if@带有_MEM_DEBUG@
    ->
    #if 1
  • #if@WITH_TRIO@
    ->
    #if 0
  • #if@带调试器@
    ->
    #if 1
  • 最后四名

  • #if@带有_模块
    ->
    #if 1
  • \define LIBXSLT\u DEFAULT\u PLUGINS\u PATH()“@LIBXSLT\u DEFAULT\u PLUGINS\u PATH@”
    ->
    \define LIBXSLT\u DEFAULT\u PLUGINS\u PATH()“/usr/lib/LIBXSLT PLUGINS”
  • \if@XSLT\u LOCALE\u XLOCALE@
    ->
    \if 1
  • #if@XSLT\u LOCALE\u WINAPI@
    ->
    #if 0

    步骤3

  • 现在您已经手动执行了
    /configure
    将要执行的步骤,您可以按照前面概述的说明将
    libxslt
    文件添加到项目中:

    • config.h
    • libxslt/*.h
    • libxslt/*.c
    动态库不是
    #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();