libxslt:xml到html文本编码问题iOS



我正在使用xslt框架为iOS项目将xml转换为html。我正在将编码的xml发送到xslt框架。但是它给出的输出并没有被编码。因此,当我试图解析html时,我得到了解析器错误。

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。有人能帮我解决这个问题吗?

问题如下:在解析XML字符串的过程中,任何实体引用都会被扩展,即用它们引用的字符串值替换。

如果输入的XML包含诸如&lt;之类的实体,则在解析它们之后,即在处理XML之前,它们将显示为<

为了避免这种情况,只需将&也替换为其实体,即&amp;。更改

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

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

然后,&amp;lt;被解析为&lt;,但由于它不是迭代过程,因此不应用进一步的替换。

相关内容

  • 没有找到相关文章

最新更新