我正在尝试像本教程一样解析一些数据: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 文件中添加更多播放器标签时,例如,删除标签“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>
最佳答案
我找到了解决方案:
如果您查看本教程 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;”,问题就解决了。
关于ios - 解析 XML 时的调试问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15100419/