我的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>
我想要解析childId
的所有child
元素。
实际上,我的解析结果只是每个childId
元素的第一个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));
答案 0 :(得分:3)
解决方案是找到子元素的第一个子元素并解析其下一个元素,这里是:
此代码位于方法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));
答案 1 :(得分:0)
您需要一个遍历所有子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));
[...]