5

下面的代码正在打印以下消息:Error Domain=NSXMLParserErrorDomain Code=111 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 111.)

mainUrl = [NSURL URLWithString:@"http://www.carris.pt/pt/carreiras"];
NSString *urlContents = [NSString stringWithContentsOfURL:mainUrl encoding:NSISOLatin1StringEncoding error:nil];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:[urlContents dataUsingEncoding:NSISOLatin1StringEncoding]];
[xmlParser parse];
NSLog(@"%@", [xmlParser parserError]);

有人有线索吗?从代码中可以看出,html 采用 ISO-8859-1 编码。

更新:我将 url 提交到 html 验证器站点:http: //validator.w3.org/,它发现了 30 多个错误。我认为这与错误有关。但我可以用 HPPLE 很好地解析 html。

4

5 回答 5

4

解析时我也有“111”(未记录?)错误代码。事实证明,XML 解析器希望 XML 格式正确(例如,一个根节点包含所有其他节点)。

于 2014-07-24T02:07:56.663 回答
4

似乎没有人偶然发现正确的答案,所以就在这里。

NSXMLParserError 文档中,它说:

以下错误代码由 NSXMLParser 定义。对于此处未列出的错误代码,请参阅 <libxml/xmlerror.h> 头文件。

此列表中未提及数字 111,因此我们转到/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/libxml2/libxml/xmlerror.h,并找到该值:

XML_ERR_USER_STOP, /* 111 */

XML_ERR_USER_STOP在 libxml2中没有很多文档,但是从读取 changeset来看,当解析器看到意外的 EOF 时,它看起来像是一个快速失败。

于 2016-07-19T23:57:50.203 回答
1

如果您查看NSXMLParser.h,您将看到错误代码列表:

NSXMLParserInternalError = 1,
NSXMLParserOutOfMemoryError = 2,
NSXMLParserDocumentStartError = 3,
NSXMLParserEmptyDocumentError = 4,
NSXMLParserPrematureDocumentEndError = 5,
NSXMLParserInvalidHexCharacterRefError = 6,
NSXMLParserInvalidDecimalCharacterRefError = 7,
NSXMLParserInvalidCharacterRefError = 8,
NSXMLParserInvalidCharacterError = 9,
NSXMLParserCharacterRefAtEOFError = 10,
NSXMLParserCharacterRefInPrologError = 11,
NSXMLParserCharacterRefInEpilogError = 12,
...

所以它看起来像是一个,它在文档NSXMLParserCharacterRefInPrologError的“常量”部分中定义。它说:

NSXMLParserCharacterRefInPrologError 在序言中发现无效字符。在 iOS 2.0 及更高版本中可用。在 NSXMLParser.h 中声明。

于 2013-12-08T15:15:33.350 回答
0

我在解析 XML 时遇到了类似的问题。问题可能是您使用的编码。尝试 UTF8 编码而不是 iOSLatin 即

NSString *urlContents = [NSString stringWithContentsOfURL:mainUrl encoding:NSUTF8StringEncoding error:nil];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:[urlContents dataUsingEncoding:NSUTF8StringEncoding]];
于 2013-12-08T15:29:17.290 回答
0

我最近遇到了同样的错误,发现问题是无效的 XML 标签。前端代码没有错误,但问题出在后端站点。为了说明,我收到的 XML 数据如下:

    <TABLE>
      <item>
           <0>memo</0>
           <1>179</1>
      </item>
    </TABLE>

尝试解析名称标签为0或1的元素时出现错误(NSXMLParseErrorDomain = 111)。然后我在后端更改了这样的XML;

    <TABLE>
     <item>
        <name>memo</name>
        <weight>179</weight>
     </item>
    </TABLE>

然后解析工作完美,因为以前的 XML 具有无效的标记名称。

于 2021-08-31T12:46:50.200 回答