2013-02-10 3 views
0

У меня есть XML (KML) с этой структурой:NSXML Анализировать для прошивки

<Document> 
<Folder> 
    <Folder> 
     <name>A -</name> 
     <Placemark> 
      <name>Afghanistan</name> 
      <description></description> 
      <Style> 
       <PolyStyle> 
        <color>aaffffff</color> 
        <colorMode>random</colorMode> 
       </PolyStyle> 
      </Style> 
      <Polygon> 
       <outerBoundaryIs> 
        <LinearRing> 
         <coordinates> 65.62729644775391,37.33319854736328,0 65.64692687988283,37.45888137817383,0</coordinates> 
        </LinearRing> 
       </outerBoundaryIs> 
      </Polygon> 
     </Placemark> 
     <Placemark> 
      <name>Albania</name> 

Я пытаюсь получить название каждой страны и их координату и сохранить их на массивах. Это дает мне «метку» для elementValue и «null» для urlValue.

if ([elementName isEqualToString:@"Placemark"]){ 
    NSString *urlValue=[attributeDict valueForKey:@"name"]; 

    NSLog(@"I just found a start tag for %@ %@",elementName,urlValue); 

} 

Следует ли использовать какой-либо другой делегат? Что я здесь делаю неправильно?

ответ

1

<name> не является атрибутом <Placemark>, это дочерний элемент. Вам нужно установить флаг или какой-либо такой метод и дождаться, когда парсер снова вызовет делегата через parser:didStartElement:... с именем «имя» как elementName. Вы можете снова отключить флаг, когда вы дойдете до parser:didEndElement:... на «Метка» в рамках подготовки к следующей итерации.

+0

и как я получаю значение имени? – BlackM

+0

'parser: foundCharacters:' будет вызываться хотя бы один раз, возможно, несколько раз. Вы накапливаете символы до тех пор, пока не нажмете на конец текущего элемента, в данном случае «имя». Возможно, вам будет проще использовать стороннюю библиотеку, например [TBXML] (http://www.tbxml.co.uk/TBXML/TBXML_Free.html), которая предназначена для такого рода разбора. – rsswtmr

+0

Итак, я буду использовать глобальную переменную как флаг и читать все символы, когда elementName = name? – BlackM

Смежные вопросы