我使用NSXMLParser来剖析xml包,我在包文本中收到& apos。
我为xmlParser定义了以下内容:
[xmlParser setShouldResolveExternalEntities: YES];
永远不会调用以下方法
- (void)parser:(NSXMLParser *)parser foundExternalEntityDeclarationWithName:(NSString *)entityName publicID:(NSString *)publicID systemID:(NSString *)systemID
解析器不考虑&之前的字段中的文本。
我正在寻找如何解决这个问题,任何想法???
提前致谢 亚历
附加的XML包部分:
<?xml version="1.0" encoding="ISO-8859-1"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="urn:appwsdl"><SOAP-ENV:Body><ns1:getObjects2Response xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/"><return xsi:type="tns:objectsResult"><totalRecipes xsi:type="xsd:string">1574</totalObjects><Objects xsi:type="tns:Item"><id xsi:type="xsd:string">4311</id><name xsi:type="xsd:string"> item title 1 </name><procedure xsi:type="xsd:string">item procedure 11......
答案 0 :(得分:1)
在这里提到不同的答案之后,这就是我所做的。
当从NSURLConnection对象接收到数据时,我用'
替换了xml中"'"
的所有出现次数。然后我将该数据提供给解析器。
所以我所做的是:
NSData* parserData = [self resolveHTMLEntities: self.receivedData];
NSXMLParser* parser = [[NSXMLaParser alloc] initwithData:parserData];
这是resolveHTMLEntitites方法:
NSString *xmlCode = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSMutableString *temp = [NSMutableString stringWithString:xmlCode];
// Replace all the entities
[temp replaceOccurrencesOfString:@"&apos;" withString:@"'" options:NSLiteralSearch range:NSMakeRange(0, [temp length])];
NSData *finalData = [temp dataUsingEncoding:NSUTF8StringEncoding];
return finalData;
问题是'
转换为&apos;
,这就是为什么我们需要替换这种情况。
注意:在上面的代码块中没有执行内存管理。
希望这有帮助。
答案 1 :(得分:0)
标准实体为<
,>
,&
和"
。 '
是一个html实体引用。您的XML是否引用了XHTML名称空间或某个已定义'
的其他名称空间?
(顺便说一句,很高兴看到XML的一小部分,包括标题。)