2014-10-17 116 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;,但没有进一步的替代应用,因为它不是一个反复的过程。