2014-10-17 71 views
0

我使用xslt框架將xml轉換爲html項目。 我將編碼的xml發送到xslt框架。但它給出的輸出不是編碼的。所以,當我嘗試解析HTML,我得到解析器錯誤。libxslt:xml到html文本編碼問題iOS

NSString *xml = @"<div>a&lt;b</div>" // not exact this but its similar in encoding 
NSData *xmlMem = [xml dataUsingEncoding:NSUTF8StringEncoding]; 

NSString* styleSheetPath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileExtension]; 
xmlDocPtr doc, res; 
xsltStylesheetPtr sty; 
xmlSubstituteEntitiesDefault(1); 
xmlLoadExtDtdDefaultValue = 1; 
sty = xsltParseStylesheetFile((const xmlChar *)[styleSheetPath cStringUsingEncoding: NSUTF8StringEncoding]); 
doc = xmlParseMemory([xmlMem bytes], [xmlMem length]); 
res = xsltApplyStylesheet(sty, doc, nil); 
xmlChar* xmlResultBuffer = nil; 
xsltSaveResultToString(&xmlResultBuffer, &length, res, sty); 
NSString* resultHTML = [NSString stringWithCString: (char *)xmlResultBuffer encoding:NSUTF8StringEncoding]; 
NSLog(@"Result: %@", resultHTML); 

結果:<div>a<b<div>

結果不經編碼的HTML。任何人都可以幫我解決這個問題嗎?

+0

如果'NSString * xml = @「

a&lt;b
」'會發生什麼? – 2014-10-17 11:22:21

+0

@MathiasMüller - 你已經改變了&&及其工作.. – Cintu 2014-10-20 09:22:53

+0

我已經添加了這個作爲答案,然後,與解釋。 – 2014-10-20 10:58:21

回答

0

問題如下:在解析XML字符串的過程中,擴展任何實體引用,即用它們引用的字符串值替換。

如果您的輸入XML包含諸如&lt;的實體,則一旦它們被解析並且在可以處理XML之前它們將顯示爲<

爲了避免這種情況,只需將&替換爲其實體即&amp;即可。更改

NSString *xml = @"<div>a&lt;b</div>" 

NSString *xml = @"<div>a&amp;lt;b</div>" 

然後,&amp;lt;被解析爲&lt;,但沒有進一步的替代應用,因爲它不是一個反覆的過程。