2011-10-23 2 views
0

중첩 된 요소가 XML 안에 나타날 때 TouchXML을 사용하는 방법은 무엇입니까? . 여기TouchXML을 사용하여 중첩 된 XML 요소를 구문 분석하고 빌드 할 수 없습니다.

<itemList> 
    <item> 
    <name>SomeName</name> 
    <description>Some description</description> 
    <images> 
     <image>image1.png</image> 
     <image>image5.png</image> 
    </images> 
    </item> 
    <item> 
    <name>SomeName</name> 
    <description>Some description</description> 
    <images> 
     <image>image1.png</image> 
     <image>image5.png</image> 
    </images> 
    </item> 
</itemList> 

구문 분석 코드 것 :

resultNodes = [itemListParser nodesForXPath:@"//items" error:nil]; 

NSMutableDictionary *itemDic = [[NSMutableDictionary alloc] init]; 
itemList = [[[NSMutableArray alloc] init] autorelease]; 

NSMutableArray *images = [[NSMutableArray alloc] init]; 

// Loop through the resultNodes to access each items actual data 
for (CXMLElement *resultElement in resultNodes) { 

    for(int i = 0; i < [resultElement childCount]; i++) { 

     if ([[[resultElement childAtIndex:i] name] isEqualToString: @"images"]){ 

      [images removeAllObjects]; 

      for(int j = 0; j < [[resultElement childAtIndex:i] childCount]; j++) { 

       [images addObject:[[resultElement childAtIndex:j] stringValue]]; 
      } 

      [itemDic setObject:images forKey:[[resultElement childAtIndex:i] name]]; 

     } else { 

      [itemDic setObject:[[resultElement childAtIndex:i] stringValue] forKey:[[resultElement childAtIndex:i] name]]; 
     } 

    } 
    [itemList addObject:[[itemDic copy] autorelease]]; 
} 
[itemDic release]; 
[images release]; 
I 사전 키에 대한 NSArray를 내부 둥지 이미지 이름에 필요하고 싶습니다 @ "이미지"그러나 뭔가 코드 :(에 이상이 여기에 XML의 구조입니다

답변

1

당신은 수동으로 노드를 반복하지 말아야 XPath를 사용하는 것이 거의 나은입니다 TouchXML의 XPath는 API를 봐

+0

글쎄, 나는 xpath를 사용하는 것에 대해 불만을 갖고있다. xpath를 사용할 때 코드는 xml에 의존하게된다. 내 말은, 어떤 깊이 xml 문서 (특성을 사용하지 않는)를 구문 분석하는 범용 코드 파서를 갖고 싶습니다. 예를 들어, 구문 분석해야 할 2 xml이 있습니다. 둘 다 매우 간단합니다. 속성이 없으며 항목 목록 일뿐입니다. 그러나 하나의 XML에서 모든 요소는 태그 이름 "이미지"의 내부 요소 (자식)와 다른 "위치"를 가질 수 있습니다. xpath를 사용하면 하드 코딩이되어 다른 XML에 대해이 메서드를 사용할 수 없게됩니다. – Centurion

0

resultNodes의 = [itemListParser nodesForXPath을 : @ "// 항목"오류 : 전무]...;

not items