我目前正尝试解析一个包含另一个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" 和 systemID = "myGreatURI"
但是在xml解析期间,由于引用的原因,NSXMLParser错误1549发生。
仅在出现此错误后,才调用预期的delegate方法:
- (NSData *)parser:(NSXMLParser *)parser resolveExternalEntityName:(NSString *)entityName systemID:(NSString *)systemID
但现在systemID是nil!此外,NSXMLParser没有按预期使用我的返回数据进行解析。它不是解析它,而是将完整的XML检测为一个字符串,并通过该方法传递给我:
- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
您可以看到我有几个不同的问题。不幸的是,谷歌和苹果文档让我毫无头绪。