TBXML根元素始终为空

问题描述:

由于我使用TBXML编码了几种其他方法来正确解析XML文件,我完全被这个问题困惑不解。下面是有问题的方法。无论我尝试什么,根元素都保持为空,因此该方法的其余部分会失败。如您所见,XML文件位于通过PHP输出的Web上。我已经在另一个应用程序中使用完全相同的方法,无需任何麻烦。我将XML输出与我以前使用过的内容进行了比较,除了元素外,没有其他区别。这个方法的代码几乎是一样的,但我必须错过一些东西。任何帮助将不胜感激。TBXML根元素始终为空

- (void)loadFromZenPhoto{ 
tbxml = [[TBXML alloc] initWithURL:[NSURL URLWithString:@"http://www.flpublicarchaeology.org/civilwar/generatexml.php"]];  

// Obtain root element 
TBXMLElement *root = tbxml.rootXMLElement; 

// if root element is valid 
if (root) { 
    TBXMLElement *site = [TBXML childElementNamed:@"site" parentElement:root]; 

    // if a site element was found, create site object 
    while (site != nil) { 

     Site *aSite = [[Site alloc] init]; 

     TBXMLElement *siteid = [TBXML childElementNamed:@"id" parentElement:site]; 
     if (siteid != nil) 
      aSite.siteid = [[TBXML textForElement:siteid] intValue]; 

     TBXMLElement *parentid = [TBXML childElementNamed:@"parentid" parentElement:site]; 
     if (parentid != nil) 
      aSite.parentid = [[TBXML textForElement:parentid] intValue]; 

     TBXMLElement *folder = [TBXML childElementNamed:@"folder" parentElement:site]; 
     if (folder != nil) 
      aSite.folder = [TBXML textForElement:folder]; 

     TBXMLElement *title = [TBXML childElementNamed:@"title" parentElement:site]; 
     if (title != nil) 
      aSite.title = [TBXML textForElement:title];   


     // add site object to the sites array 
     [sites addObject:aSite]; 

     //advance to next sibling 
     site = [TBXML nextSiblingNamed:@"site" searchFromElement:site]; 
    }   
} 
} 
+0

代码看起来不错。你可以NSLog XML响应? – AAV 2012-01-05 19:32:44

好的,我认为你面临着和以前一样的问题。我想这个问题是你通过XCode建议修复了TBXML.m中的语义问题。 Please this answer for more info.

+0

我最终以自己的想法解决了这个问题,但这是问题所在。使用Xcode来“修复”TBXML.m中的警告,从而破坏了它。谢谢! – jasontk19 2012-04-11 14:10:56

那么这是一个棘手的问题。它看起来像您的Web服务正在返回ASCII编码的HTML。而TBXML需要UTF8编码。

尝试用这种

NSLog(@"stringLoad: %@", [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.flpublicarchaeology.org/civilwar/generatexml.php"] encoding:NSUTF8StringEncoding error:nil]); 

它记录到控制台stringLoad: (null)检查,但如果你使用NSLog(@"stringLoad: %@", [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://www.flpublicarchaeology.org/civilwar/generatexml.php"] encoding:NSASCIIEncoding error:nil]);

控制台登录正确的HTML响应。

希望这会有所帮助。