回答
在iPhone OS使用libxslt
其實很簡單:
- Download the source-code of libxslt和解壓。
- 在您的構建設置中將「libxslt」目錄添加到標題搜索路徑。另外,在那裏添加路徑到libxml-headers(通常爲
/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk/usr/include/libxml2
)。 - 添加libxml2.2.dylib和libxslt.dylib到鏈接框架(Xcode的「組&文件」面板:右鍵點擊「框架」 - >「添加」 - >「現有的框架......」 )。
- 創建一個簡單的XML文件及其XSL轉換。
最後,你可以使用類似於樣品上面的代碼來獲得改造的探討結果爲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();
婁佛朗哥指出,你在iPhone上不允許使用dylibs。
它可以在模擬器和手機的開發過程中正常工作,但只要您將其提交給Apple審批,它就會被拒絕。大概20分鐘內我的應用程序就被拒絕了,大概是他們的自動靜態分析工具。
取而代之,下載源代碼並將其添加到您的項目中,並鏈接LibXML2.2.dylib(不要問我爲什麼這個dylib是允許的,但XSLT不是!)並構建項目。這幾乎是你所要做的。因爲這是他指出我正確的方向,所以信賴Lou。
即使您自己編譯並構建它,也不能在iPhone上使用libxslt。我已經這樣做了,並且我的應用程序被拒絕了。 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.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
會執行,你可以請按照前面列出的說明添加libxslt
文件到您的項目:
config.h
libxslt/*.h
libxslt/*.c
- 1. XSLT分裂版本
- 2. iPhone SDK版本
- 3. Xcode,iphone版本
- 4. XSLT版本1 URL編碼
- 5. XSLT:深層子版本
- 6. SQLite,iPhone和版本
- 7. 舊Iphone sdk版本
- 8. Iphone版本加密
- 9. 從iphone版本創建ipad版本?
- 10. 識別iphone的版本
- 11. iphone編程中的版本控制
- 12. MonoDevelop中的「默認」iPhone SDK版本
- 13. 如何將xslt版本2.0轉換爲版本1.0
- 14. iPhone - 如何檢測iPhone版本?
- 15. Android 2.1(及更早版本)支持XSLT?
- 16. 版本使用XSLT轉換XML
- 17. XSLT版本 - Oracle服務總線
- 18. XSLT版本1.0如何通過
- 19. iPhone創建精簡版版本
- 20. iPhone發佈版本崩潰
- 21. iPhone/iPad/iPod型號版本
- 22. iphone部署版本要求
- 23. iPhone - 多個UIViewControllers版本
- 24. iPhone Lite版本升級
- 25. 只需更改版本即可將Xslt 1.0更改爲XSLT 2.0
- 26. xcode - SDK版本與用戶iPhone OS版本的關係
- 27. 固件版本的iPhone/iPad通用版本問題
- 28. iPhone App Store版本與模擬器版本不同:本地化
- 29. 如何在Xalan C++中打印Xalan支持的XSLT版本?
- 30. 如何從給定的XSLT文件中獲取版本號。
dylibs不允許在iPhone上。您需要創建一個靜態庫 – 2010-07-22 00:20:54
不幸的是,蘋果會拒絕這個。請參閱下面的Chris Gilbert的評論。由於他們沒有提供這個dylib的標題,他們認爲它是一個私人框架,儘管它是一個公共圖書館。 – Jason 2010-11-25 16:06:05
在「xsltSaveResultToString(&xmlResultBuffer,&length,res,sty)」上獲取EXC_BAD_ACCESS錯誤;「有任何想法嗎? – docchang 2015-01-21 19:45:40