0

我正在使用 xslt 框架将 xml 转换为 iOS 项目的 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。谁能帮我解决这个问题?

4

1 回答 1

0

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

如果您的输入 XML 包含诸如 之类的实体&lt;,它们将<在解析后立即出现 - 在 XML 可以被处理之前。

为避免这种情况,也只需替换&为它的实体,即&amp;. 改变

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

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

然后,&amp;lt;解决了,&lt;但没有应用进一步的替换,因为它不是一个迭代过程。

于 2014-10-20T10:57:13.370 回答