2013-02-26 90 views
1

我試圖解析這樣的教程一些數據時: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

回答

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」,則問題得到解決。

0

我想檢查零首先應該解決您的問題:

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