【问题标题】:libxslt: xml to html text encoding issue iOSlibxslt:xml 到 html 文本编码问题 iOS
【发布时间】:2014-10-17 09:25:25
【问题描述】:

我正在使用 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);

结果:&lt;div&gt;a&lt;b&lt;div&gt;

结果不是编码的 html。谁能帮我解决这个问题?

【问题讨论】:

  • 如果NSString *xml = @"&lt;div&gt;a&amp;amp;lt;b&lt;/div&gt;"会发生什么?
  • @MathiasMüller - 是的,我已将 & 更改为 &及其工作..
  • 我已将此作为答案添加,然后附上解释。

标签: ios objective-c cocoa-touch xslt libxslt


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2011-04-30
    • 2016-08-02
    • 2010-10-30
    • 2011-01-25
    • 1970-01-01
    相关资源
    最近更新 更多