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>

それからそれは動作しません。私のパーサーは同じチュートリアルに基づいていますが、他の変数名です。デバッグ画面を見てください: XML ファイルに数字タグがないため、数字が 0x00 と表示されています... 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 

そして問題は、「else continue;」です。この部分を削除する必要があるのは、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 に答える