提问人:partikles 提问时间:8/14/2013 最后编辑:Master Strokepartikles 更新时间:9/30/2013 访问量:1027
设备不在模拟器中的 XML 分析错误 - NSXMLParserErrorDomain 代码 = 5
XML Parse Error in Device not in Simulator - NSXMLParserErrorDomain Code=5
问:
我从服务器加载 XML 响应并使用 NSXMLParser 进行解析。模拟器中没有错误。但在 iPhone 中显示 NSXMLParserErrorDomain Code=5。
NSString *settings = "http://website.com/settings";
NSURL *url = [NSURL URLWithString:settings];
NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
xmlParser.delegate = self;
BOOL success = [xmlParser parse];
if(success)
{
NSLog(@"Parse Success");
}else{
NSLog(@"Parse Failure");
NSLog(@"Parse Error: %@",[xmlParser parserError]);
}
XML 响应
<?xml version="1.0" encoding="utf-8"?>
<Settings>
<AutoRefereshTime>10</AutoRefereshTime>
<CashierPasswordRequired>Y</CashierPasswordRequired>
<CheckoutTableColor>#FFFF00</CheckoutTableColor>
<CompanyLogo>http://website.com/UCS_WS/Images/Logo/Logo.png</CompanyLogo>
<CompanyName>UnoRestaurant</CompanyName>
<ConfirmedTableColor>008ED5</ConfirmedTableColor>
<Description>The Great Indian Restaurant</Description>
<DevelopedBy>Unipro</DevelopedBy>
<HoldTableColor>A02325</HoldTableColor>
<ImageURL>http://rwebsite.com/UCS_WS/Images/Dish/</ImageURL>
<isCategoryEnabled>Y</isCategoryEnabled>
<isOtherLanguageEnabled>Y</isOtherLanguageEnabled>
<NormalTableColor>#0000FF</NormalTableColor>
<OrderScreenView>POS View</OrderScreenView>
<OtherLanguage>Tamil</OtherLanguage>
<SharedTableColor>#00FFFF</SharedTableColor>
</Settings>
解析错误:
Error Domain=NSXMLParserErrorDomain Code=5 "The operation couldn’t be completed. (NSXMLParserErrorDomain error 5.)"
答:
0赞
Master Stroke
8/14/2013
#1
在这里参考@mobibob给出的答案==> NSXMLParserErrorDomain 错误 5 是什么意思?
根据 Dave DeLong 的说法,
这意味着它在解析您的文件时遇到了问题。
我认为它可能是 XML 中的 XSLT 引用 - 因为它指向 Web 服务器。我将回顾并回答这个问题。
这是文件的路径。我的代码甚至没有接近正确的位置 - 而且我缺少一个尾随字母“s”。错误代码定义意味着“文件过早结束”,这导致我截断了我的文件而没有任何成功。然后,我回到了基础,并迭代了文件系统以查找我的文件。
我通过使用 NSFileManager 循环访问我的文件进行调试,然后验证它是否可使用 contentsAtPath 方法加载。我能够用 NSLog() 转储它。一旦我确信文件格式正确并以原始形式加载,我就确保我的 NSURL 是用相同的语法和方法构建的。然后它正确加载。现在,我可以加载网络文件的“全功能”内容或本地的“示例”内容。
NSDirectoryEnumerator *dirEnumerator = [[NSFileManager defaultManager] enumeratorAtPath: NSHomeDirectory()];
NSString *something;
NSString *f;
while( something = [dirEnumerator nextObject] ) {
f = [[[NSString alloc] initWithFormat: @"%@/%@", NSHomeDirectory(), something] autorelease];
if( [f hasSuffix :@"two_cookies.xml"] ){
NSData *nsData = (NSData*) [[NSFileManager defaultManager] contentsAtPath: f];
NSLog(@"%@", nsData );
}
}
输出
2009-10-22 00:47:40.147 MyApp[13843:20b]
评论
0赞
partikles
8/14/2013
我已经用模拟器,iPhone和iPad进行了测试。它在模拟器和 iPad 中运行良好。但在 iPhone 中不起作用。我不知道为什么它不能只在iPhone中工作。然后我意识到,在我的iPhone wifi设置中,我设置为HTTP代理到手动,以使用Charles Web调试进行一些网络测试。原因 - 设备 Wifi 设置 HTTP 代理处于手动状态。已解决 - 设备 Wifi 设置 HTTP 代理处于关闭状态。但不知道它背后的技术原因。
评论