【问题标题】:NSXMLParser: Error while trying to resolve and parse external entityNSXMLParser:尝试解析和解析外部实体时出错
【发布时间】:2012-08-13 01:01:21
【问题描述】:

我目前正在尝试使用外部已解析实体引用来解析包含另一个 XML 的 XML。但是,NSXMLParser 会抛出错误,而不是解析包含的 XML。

xml 看起来有点像这样:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE parentElement[
<!ENTITY extern SYSTEM "myGreatURI">
]>

<parentElement
    attribute1="1" 
    attribute2="2" 
    ...>
    <childElement>

        &extern;

        <parentElement
        ..>
            <childElement>

我已启用解析器来解析外部引用:

self.parser.shouldResolveExternalEntities = TRUE;

由于我的外部实体的定义被解析,相应的委托方法被调用:

- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)entityName publicID:(NSString *)publicID systemID:(NSString *)systemID

它传递了正确的值:entityName = "extern" and systemID = "myGreatURI"

但是当在 xml 中解析引用时,会出现 NSXMLParser 错误 1549


只有在发生此错误后,才会调用预期的委托方法:

- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)entityName systemID:(NSString *)systemID 

但现在 systemID 是 nil!此外,NSXMLParser 没有按预期使用我返回的数据。不是解析它,而是将完整的 XML 检测为一个字符串,通过方法交给我:

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string

如您所见,我有几个不同的问题。不幸的是,谷歌和苹果文档让我一无所知。

【问题讨论】:

    标签: ios xml nsxmlparser


    【解决方案1】:

    据我所知, NSXMLParser在resolveExternalEntityName中总是返回systemID = nil,因为到这里的时候,systemID资源应该已经加载了,如果检索失败,说明systemID无效什么的,反正也没用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-12
      • 1970-01-01
      • 2014-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多