【问题标题】:XML Parse Error in Device not in Simulator - NSXMLParserErrorDomain Code=5设备中的 XML 解析错误不在模拟器中 - NSXMLParserErrorDomain 代码 = 5
【发布时间】:2013-08-16 07:32:31
【问题描述】:

我从服务器加载 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.)"

【问题讨论】:

  • 很可能是您的入站 xml 有问题,可能是某个地方的不平衡块 - 您可以发布 xml 吗?
  • @JohnWoods 我共享了 xml 文件 docs.google.com/file/d/0B1jfEVVBBWQeSlhZMkhQQjN3cEk/…
  • 我已经用模拟器、iPhone 和 iPad 对此进行了测试。它在模拟器和 iPad 中运行良好。但不适用于 iPhone。我不知道为什么它只在 iPhone 中不起作用。然后我意识到在我的 iPhone wifi 设置中,我将 HTTP Proxy 设置为 Manual 以使用 Charles Web Debugging 进行一些网络测试。已解决 - 设备 Wifi 设置 HTTP 代理处于关闭状态。但不知道背后的技术原因。

标签: iphone objective-c xml-parsing


【解决方案1】:

在此处参考@mobibob 给出的答案==> What is the meaning of NSXMLParserErrorDomain error 5.?

根据戴夫·德隆的说法,

这意味着它在解析您的文件时遇到问题。

我认为它可能是 XML 中的 XSLT 引用——因为它指向网络服务器。我将审查并以改进的答案返回这个问题。

这是文件的路径。我的代码甚至没有靠近正确的位置——而且我错过了一个尾随字母“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 我的应用程序[13843:20b]

【讨论】:

  • 我已经用模拟器、iPhone 和 iPad 对此进行了测试。它在模拟器和 iPad 中运行良好。但不适用于 iPhone。我不知道为什么它只在 iPhone 中不起作用。然后我意识到在我的 iPhone wifi 设置中,我将 HTTP Proxy 设置为 Manual 以使用 Charles Web Debugging 进行一些网络测试。原因 - 设备 Wifi 设置 HTTP 代理处于手动状态。已解决 - 设备 Wifi 设置 HTTP 代理处于关闭状态。但不知道背后的技术原因。
猜你喜欢
  • 1970-01-01
  • 2011-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-12
  • 2012-04-19
  • 1970-01-01
相关资源
最近更新 更多