मैं अपने आईफोन एप्लिकेशन में एक्सएमएल/एक्सएसएलटी का उपयोग करने की योजना बना रहा हूं।आईफोन में एक्सएसएलटी का संस्करण
एक्सएसएलटी का वर्तमान संस्करण वर्तमान में आईफोन पर समर्थित है? क्या मैं एक्सएसएलटी 2.0 या सिर्फ 1.0 का उपयोग कर सकता हूं?
मैं अपने आईफोन एप्लिकेशन में एक्सएमएल/एक्सएसएलटी का उपयोग करने की योजना बना रहा हूं।आईफोन में एक्सएसएलटी का संस्करण
एक्सएसएलटी का वर्तमान संस्करण वर्तमान में आईफोन पर समर्थित है? क्या मैं एक्सएसएलटी 2.0 या सिर्फ 1.0 का उपयोग कर सकता हूं?
iPhone OS पर libxslt
का उपयोग करना वास्तव में काफी आसान है:
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2
)।और अंत में आप ऊपर tranformation में परिणाम प्राप्त करने के लिए एक कोड नमूना के लिए इसी तरह उपयोग कर सकते हैं एक NSString
(जैसे एक 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();
लो फ्रेंको बताते हैं के रूप में, आप आईफोन पर डिलिब की अनुमति नहीं है।
यह सिम्युलेटर और फोन दोनों में विकास में ठीक काम करेगा, लेकिन जैसे ही आप इसे ऐप्पल को स्वीकृति के लिए सबमिट करेंगे, इसे अस्वीकार कर दिया जाएगा। मेरा ऐप लगभग 20 मिनट के भीतर खारिज कर दिया गया था, संभवतः उनके स्वचालित स्थिर विश्लेषण उपकरण द्वारा।
इसके बजाय, स्रोत डाउनलोड करें, इसे अपनी परियोजना में जोड़ें, LibXML2.2.dylib को लिंक करें (मुझसे पूछें कि इस डिलिब की अनुमति क्यों है लेकिन एक्सएसएलटी नहीं है!) और प्रोजेक्ट का निर्माण करें। आपको बस इतना करना है। इसके लिए लो को श्रेय दिया क्योंकि वह मुझे सही दिशा में इंगित करता था।
libxslt का सिरदर्द का उपयोग कर रहा है? - हां कुछ हद तक, लेकिन यह असंभव नहीं है। सबसे अच्छी बात यह है कि आप LIBXSLT के लिए स्रोत कोड डाउनलोड कर सकते हैं और अपने एक्सकोड प्रोजेक्ट में किसी फ़ोल्डर में 40 या तो फ़ाइलें (20 .m और 20 .h फ़ाइलें) शामिल कर सकते हैं। एक बार जब आप libxml2.2.dylib जोड़ चुके हैं (विचित्र रूप से यह डाइलीब स्वीकार्य है!) ढांचा, LIBXSLT का स्रोत कोड मुख्य प्रोजेक्ट के हिस्से के रूप में संकलित किया जाएगा और आपके ऐप के संबंध में आपको कोई समस्या नहीं होगी असमर्थित एपीआई का उपयोग करने के लिए खारिज कर दिया गया। –
इस तरह संकलित नहीं कर सकता। 'config.h' फ़ाइल नहीं मिली ' – surfrider
आप आईफोन पर libxslt का उपयोग नहीं कर सकते हैं भले ही आप इसे संकलित करते हैं और इसे स्वयं बनाते हैं। मैंने ऐसा किया है और मेरे ऐप को बार-बार खारिज कर दिया है। AppReview प्रक्रिया द्वारा उपयोग किए जाने वाले टूल आपके कोड में स्थिर रूप से जुड़े प्रतीकों और आईओएस से गतिशील रूप से जुड़े प्रतीकों के बीच अंतर नहीं करते हैं। दूसरे शब्दों में, यदि ऐसा लगता है कि आप libxslt का उपयोग कर रहे हैं, तो आपका ऐप खारिज कर दिया जाएगा क्योंकि ऐपस्टोर यह नहीं बता सकता कि आप एक निजी एपीआई का उपयोग कर रहे हैं या नहीं।
स्रोत से इसका उपयोग करना पूरी तरह से स्वीकार्य है क्योंकि यह आपका स्रोत है। ऐपस्टोर आपको स्वचालित रूप से अस्वीकार कर देगा यदि आपके पास अभी भी गतिशील रूप से लिंक की गई लाइब्रेरी का संदर्भ है।आप libxslt को स्थिर लाइब्रेरी के रूप में बना सकते हैं और इसे लिंक कर सकते हैं क्योंकि आप समीक्षा के लिए एक बार में अपनी सभी बाइनरी पेश कर रहे हैं। libxslt-1.1.26 में एक ज्ञात सुरक्षा समस्या है ... संभावित रूप से ऐप्पल जानबूझकर आपको प्रदान की गई एक दोषपूर्ण लाइब्रेरी का उपयोग क्यों नहीं करना चाहता। मुझे लगता है कि यह libxslt-1.1.28 में तय है –
XCode 5 + iOS7 baseSDK को अद्यतन करने के हर किसी के लिए, आप है कि अगर आप अपनी परियोजना में libxslt-1.1.26
शामिल है और स्रोत से संकलित, यह libxml
का पिछला संस्करण उपयोग कर रहा था देखेंगे। नवीनतम आधार में एसडीके libxml
अपडेट किया गया है और इस तरह आपको libxslt-1.1.28
पर अपडेट करने की आवश्यकता होगी।
जब आप नवीनतम .tar.gz
फाइल डाउनलोड सब आप पहली बार अपने प्रोजेक्ट में शामिल करने के लिए की जरूरत है:
config.h
libxslt/*.h
libxslt/*.c
लेकिन config.h
और libxslt/xsltconfig.h
अभी तक अस्तित्व में नहीं है। उनके पास .in
प्रत्यय है। आपको या तो ./configure
स्क्रिप्ट चलाने की आवश्यकता होगी या यदि वह आपके लिए बॉक्स से सीधे काम नहीं कर रहा है तो मैंने धोखा दिया जैसा मैंने किया था।
चरण 1 - 0 मतभेद
सीधे शब्दों में config.h.in
की एक नई प्रतिलिपि config.h
नामित पैदा करते हैं।
चरण 2 - 12 मतभेद
सीधे शब्दों में libxslt/xsltconfig.h.in
की एक नई प्रतिलिपि libxslt/xsltconfig.h
नामित पैदा करते हैं।
पहले चार परिवर्तन केवल संस्करण संख्याएं हैं।
#define LIBXSLT_DOTTED_VERSION "1.1.28"
#define LIBXSLT_VERSION 10128
#define LIBXSLT_VERSION_STRING "10128"
#define LIBXSLT_VERSION_EXTRA "-GITv1.1.28"
अगले चार
#if @[email protected]
->#if 1
// सीधे शब्दों में >#if 1
#if @[email protected]
- - 1
#if @[email protected]
साथ @[email protected]
की जगह>#if 0
#if @[email protected]
->#if 1
पिछले चार
#if @[email protected]
->#if 1
#define LIBXSLT_DEFAULT_PLUGINS_PATH() "@[email protected]"
->#define LIBXSLT_DEFAULT_PLUGINS_PATH() "/usr/lib/libxslt-plugins"
#if @[email protected]
->#if 1
#if @[email protected]
->#if 0
चरण 3
अब है कि आप मैन्युअल चरणों का पालन किया है कि ./configure
आप प्रदर्शन किया है | कर सकते हैंजोड़ने के लिए पहले उल्लिखित निर्देशों का पालन करें अपनी परियोजना के लिए 0 फाइलें:
config.h
libxslt/*.h
libxslt/*.c
dylibs iPhone पर अनुमति नहीं है। आपको एक स्थिर lib –
बनाने की आवश्यकता है, दुर्भाग्यवश, ऐप्पल इसे अस्वीकार कर देगा। नीचे क्रिस गिल्बर्ट द्वारा टिप्पणियां देखें। चूंकि वे इस डाइलीब के लिए हेडर प्रदान नहीं कर रहे हैं, इसलिए वे सार्वजनिक पुस्तकालय होने के बावजूद इसे एक निजी ढांचा मानते हैं। – Jason
"xsltSaveResultToString (& xmlResultBuffer, और लंबाई, res, sty) पर EXC_BAD_ACCESS त्रुटि प्राप्त करना;" कोई विचार? – docchang