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 ?
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 ?
I'm afraid the xslt situation is rather grim. The NSXMLDocument
class would be the way to do this but Apple pulled it from the iPhone.
TouchXML plans xslt support but doesn't have it yet.
The only option I know of is to directly use libxslt, which supports xslt 1.0 and some of the exslt extensions.
Same question here.
I found some sample libxslt code in C here., but I'm not sure how to incorporate that into an iPhone/ObjC app.
I'm already linking in libxml2...
Header Search Paths: /usr/include/libxml2
Other Linker Flags: -lxml2
...would I need to do something similar for libxsl?
Using libxslt
on the iPhone OS is actually quite easy:
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2
).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 <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();