Ниже приведен XML с рекурсивными элементами:
<Tree>
<Node name="books" label="books">
<Node name="Maths" label="Maths">
<Node name="Topic 1" label="Topic 1">
<Node name="chapter 1" label="chapter 1"/>
<Node name="chapter 2" label="chapter 2"/>
<Node name="chapter 3" label="chapter 3"/>
<Node name="chapter 4" label="chapter 4"/>
<Node name="chapter 5" label="chapter 5"/>
</Node>
</Node>
<Node name="Physics" label="Physics">
<Node name="Topic 1" label="Topic 1">
<Node name="chapter 1" label="chapter 1"/>
<Node name="chapter 2" label="chapter 2"/>
<Node name="chapter 3" label="chapter 3"/>
</Node>
</Node>
</Node>
<Node name="Pens" label="Pens">
</Node>
</Tree>
H
Я пытался использовать следующий код для получения рекурсивных значений, но я могу получить атрибуты первого уровня, но могуне получить значение атрибута элемента "Node" второго уровня,
-(void)parse
{
NSString *strVal = [[NSString alloc] initWithData:xmlData encoding:NSUTF8StringEncoding];
xmlDoc * doc = xmlParseMemory(xmlData.bytes, xmlData.length);
xmlNodePtr nodePtr =xmlDocGetRootElement(doc);
nodePtr = nodePtr->xmlChildrenNode;
getChild(nodePtr, (xmlChar *)"Node");
}
int recursive = 0;
void getChild(xmlNodePtr nodePtr, xmlChar *elementName)
{
NSLog(@"recursive: %d",recursive ++);
xmlNodePtr tempPtr = nodePtr;
while (tempPtr!= NULL) {
if (!xmlStrcmp(tempPtr->name, elementName)) {
xmlChar *v = xmlGetProp(tempPtr, (const xmlChar *)"name");
NSLog(@"element:%s field:%s val: %s",elementName, "name", v);
// nodePtr = nodePtr->next;
}
tempPtr = tempPtr -> next;
}
xmlNodePtr nodePtr2 = nodePtr -> xmlChildrenNode;
getChild(nodePtr2, elementName);
}
и результат:
2011-12-09 01: 12: 12.271 LibXMLParser [4123: 207] recursive: 0 2011-12-09 01: 12: 12.275 LibXMLParser [4123: 207] элемент: поле SystemNode: имя val: MSG 2011-12-09 01: 12: 12.276 LibXMLParser [4123: 207] элемент: поле SystemNode: имя val: SAP 2011-12-09 01: 12: 12.277 LibXMLParser [4123: 207] рекурсивный: 1
Может кто-нибудь дать мне ответ, как получить рекурсивный дочерний элемент узла из корня?
Заранее спасибо