1

我正在尝试解析一些数据,如本教程:http : //www.raywenderlich.com/725/how-to-read-and-write-xml-documents-with-gdataxml 并在“loadParty”中遇到问题" 方法(查看教程)。在本教程中,XML 如下所示:

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

在解析这个时,这行得通。但是当我在我的 xml 文件中添加更多 Player 标签时,例如,删除标签“Level”:

<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>

然后它不起作用。我的解析器基于相同的教程,但其他变量名称。看看我的调试屏幕:它说数字是 0x00,因为我的 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>
4

2 回答 2

1

我找到了解决方案:

如果您查看本教程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;”,问题就解决了。

于 2013-02-27T14:41:49.333 回答
0

我认为首先检查 nil 应该可以解决您的问题:

if (numbers != nil && numbers.size > 0) {...}
于 2013-02-26T23:47:15.640 回答