我的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的所有child元素。
实际上,我的解析结果只是每个childs元素的第一个childs:
[...]
do {
if ([[TBXML elementName:element] isEqualToString:@"childSet"]) {
[...]
TBXMLElement *xmlChildId = [TBXML childElementNamed:@"childId" parentElement:child];
[...]
}
} while ((element = element->nextSibling));
[...]在这种情况下,我只得到11。这里出什么问题了?
编辑1:
解决方案是找到子元素的第一个子元素并解析该元素的下一个元素,如下所示:
此代码位于方法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));发布于 2011-09-16 18:33:56
解决方案是找到子元素的第一个子元素并解析该元素的下一个元素,如下所示:
此代码位于方法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));发布于 2011-09-13 18:16:00
您需要一个遍历所有子xml元素的内部循环。childElementName:parentElement:将只返回具有该名称的第一个子级。
试一试如下:
[...]
do {
if ([[TBXML elementName:element] isEqualToString:@"childSet"]) {
[...]
TBXMLElement *xmlChildId = [TBXML childElementNamed:@"childId"
parentElement:child];
do {
// Do nslog or whatever else on xmlChildId
[...]
// Find next child element to process
xmlChildId = [TBXML nextSiblingName:@"childId"
searchFromElement:xmlChildId];
} while (xmlChildId != nil);
}
} while ((element = element->nextSibling));
[...]https://stackoverflow.com/questions/7404641
复制相似问题