NSXMLParserErrorDomain 111

NSXMLParserErrorDomain 111

提问人:pedroremedios 提问时间:12/8/2013 最后编辑:pedroremedios 更新时间:8/31/2021 访问量:11083

问:

下面的代码正在打印以下消息: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。

iOS的 目标-C nsxmlparser nsxmlparsererror域

评论

0赞 qwertz 8/12/2017
我看到它在解析具有无效 UTF-8 字符的 CDATA 标记时弹出。

答:

1赞 user1118321 12/8/2013 #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 中声明。

评论

0赞 thegrinner 7/9/2014
那么代码 111 应该是 11 吗?我注意到文档中没有定义 111,这向我表明情况可能是这样。
1赞 user1118321 7/9/2014
这是我的猜测。要么是那个,要么是苹果没有发布的一些内部错误。
3赞 CMash 3/12/2015
这不是正确答案,111 更有可能是由于 XML 格式不正确造成的。使用 xmlvalidation.com 帮助我找到了问题
0赞 Sam B 12/8/2013 #2

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

NSString *urlContents = [NSString stringWithContentsOfURL:mainUrl encoding:NSUTF8StringEncoding error:nil];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:[urlContents dataUsingEncoding:NSUTF8StringEncoding]];

评论

0赞 pedroremedios 12/8/2013
我试过了,我得到了.Error Domain=NSCocoaErrorDomain Code=-1 "The operation couldn’t be completed. (Cocoa error -1.)" UserInfo=0x8a50420 {NSXMLParserErrorMessage=Could not open data stream}
4赞 Dan Waylonis 7/24/2014 #3

解析时我也有“111”(未记录?事实证明,XML 解析器期望 XML 格式良好(例如,一个根节点包含所有其他根节点)。

评论

0赞 Kaydell 9/21/2014
+1,我发现我没有结束标记,所以我的 XML 格式也不好。
0赞 CMash 3/12/2015
我用 xmlvalidation.com 来找到我的问题,这绝对是一些格式不正确的狡猾的 XML!
5赞 J. Cocoe 7/20/2016 #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 */

libxml2 中没有很多关于文档的内容,但从阅读变更集来看,当解析器看到意外的 EOF 时,它看起来是一个快速失败。XML_ERR_USER_STOP

0赞 Akif 8/31/2021 #5

我最近遇到了同样的错误,发现问题是无效的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 具有无效的标签名称。