Version of XSLT in iPhone

前端 未结 5 494
情歌与酒
情歌与酒 2020-12-01 04:17

I plan to use XML/XSLT in my iPhone application.

What version of XSLT is currently supported on the iPhone? Can I use XSLT 2.0 or just 1.0 ?

5条回答
  •  春和景丽
    2020-12-01 04:44

    Using libxslt on the iPhone OS is actually quite easy:

    1. Download the source-code of libxslt and extract it.
    2. Add the "libxslt" dir to Header search paths in your build settings. Also, add the path to the libxml-headers there (usually /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2).
    3. Add libxml2.2.dylib and libxslt.dylib to the linked frameworks (Xcode "Groups & Files" panel: right click on "Frameworks" --> "Add" --> "Existing Frameworks...").
    4. Create a simple XML file and its XSL tranformation.

    And finally you can use a code similar to the sample above to get the tranformation result into an NSString (e.g. to display in in 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();
    

提交回复
热议问题