【发布时间】:2011-11-16 07:21:17
【问题描述】:
我的 XML 如下所示:
<root>
<sets>
<childSets>
<childs>
<child>
<childId>11</childId>
</child>
<child>
<childId>22</childId>
</child>
<child>
<childId>33</childId>
</child>
<child>
<childId>44</childId>
</child>
[...]
</childs>
</childSets>
<childSets>
[...]
</childSets>
</sets>
</root>
我想解析child 的所有childId 元素。
其实我解析的结果只是每个childs元素的第一个childId:
[...]
do {
if ([[TBXML elementName:element] isEqualToString:@"childSet"]) {
[...]
TBXMLElement *xmlChildId = [TBXML childElementNamed:@"childId" parentElement:child];
[...]
}
} while ((element = element->nextSibling));
[...]
在这种情况下,我只得到11。这里有什么问题?
编辑 1:
解决办法是找到子元素的第一个子元素,并解析this的下一个元素,这里是:
这段代码在方法traverseElement的do while循环中
do { [...]
if ([[TBXML elementName:element] isEqualToString:@"childSet"]) {
//find the first child
if ((ChildPARENTELEMENT->firstChild)) {
while (ChildOfCHILDELEMENT!=nil) {
NSLog(@"....");
ChildOfCHILDELEMENT = [TBXML nextSiblingNamed:@"childs" searchFromElement:ChildOfCHILDELEMENT];
}
}
}
while((element = element->nextSibling));
【问题讨论】:
-
是的,第二个 do while 使应用程序崩溃。我不知道如何解决第二个循环。你能给我一个建议吗?
-
请提供有关您看到的错误的更多信息。你得到一个 SIGABRT 吗?应用程序是否在没有日志/调试信息的情况下关闭?如果有调试信息,哪条线路崩溃了,错误信息是什么?
-
你好 Sam,谢谢你的帮助,我已经包含了我的解决方案,我昨天晚上解决了 :) 我不记得它是 SIGABRT 还是 EXC_BAD_ACCESS 但错误出现在第二个循环条件中。