调试问题解析XML

调试问题解析XML

问题描述:

我试图解析这样的教程一些数据时:http://www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml并在“loadParty”的方法跨越问题就来(看教程)。在教程中,XML看起来像这样:调试问题解析XML

<Party> 
<Player> 
    <Name></Name> 
    <Level></Level> 
    <Class></Class> 
    <HP></HP> 
    <MaxHP></MaxHP> 
</Player> 
</Party> 

而解析这个,这个工程。但是,当我加入我的XML文件中的一些球员更多的标签,例如,去掉标签“级别”:

<Party> 
<Player> 
    <Name></Name> 
    <Level></Level> 
    <Class></Class> 
    <HP></HP> 
    <MaxHP></MaxHP> 
</Player> 
<Player> 
    <Name></Name> 
      // Level is removed here 
    <Class></Class> 
    <HP></HP> 
    <MaxHP></MaxHP> 
</Player> 
</Party> 

然后它不工作。我的解析器基于相同的教程,但其他变量名称。看看我的调试屏幕: 它说的数字是0×00,因为我没有在我的XML文件中有一些标签那里...我该如何解决这个问题,因为我不希望我的XML是所有一样。

http://i53.tinypic.com/280kw8z.png

我的XML是这样的:

<app> 
    <window ident="1" type="intro"> 
      <title></title> 
      <subtitle></subtitle> 
      <number></number> 
    </window> 
    <window ident="2" type="intro"> 
      <title></title> 
      <subtitle></subtitle> 
    </window> 
    </app> 
+0

这是您使用的是真正的XML?我没有看到一个节点号码! – 2013-02-26 22:24:22

+0

其从谷歌GDataXML类:https://code.google.com/p/gdata-objectivec-client/downloads/list – Shinonuma 2013-02-26 22:27:08

+0

是OK,但你需要解析的XML是什么,是不是就像您在发布你的问题?你想从这个调用中得到什么[appMember elementsForName:@“number”]? – 2013-02-26 22:30:06

我已经找到了解决办法:

如果你看看这个教程http://www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml,然后在loadApp方法你有这样的:

// Name 
NSArray *names = [partyMember elementsForName:@"Name"]; 
if (names.count > 0) { 
    GDataXMLElement *firstName = (GDataXMLElement *) [names objectAtIndex:0]; 
    name = firstName.stringValue; 
} else continue; // Remove this 

// Level 
NSArray *levels = [partyMember elementsForName:@"Level"]; 
if (levels.count > 0) { 
    GDataXMLElement *firstLevel = (GDataXMLElement *) [levels objectAtIndex:0]; 
    level = firstLevel.stringValue.intValue; 
} else continue; // Remove this 

而且问题是“否则继续;”你需要删除这部分,因为当他没有找到XML中的元素时,他会去“else”然后继续,这意味着他将返回到for循环的开始并且不会继续。如果您删除“else continue”,则问题得到解决。

我想检查零首先应该解决您的问题:

if (numbers != nil && numbers.size > 0) {...} 
+0

这没有奏效,它仍然是同样的问题。 – Shinonuma 2013-02-27 08:11:07

+0

好的只是澄清,你的程序只是挂在if(numbers.size> 0),它永远不会通过这条线? – 2013-02-27 08:54:31

+0

如果我在number.count> 0的行上设置了一个断点,它会一直运行到那里。如果我在GDataXMLElement * firstNumber =(GDataXMLElement *)[numbers objectAtIndex:0]上设置了一个断点,它不会再继续下去,并且在调试器视图中看不到任何东西。 – Shinonuma 2013-02-27 11:55:26