2012-05-29 9 views
0

У меня есть xml-файл, который я создаю сам.libxml2 xml parsing issue

<?xml version='1.0' encoding='utf-8' ?> 
    <Root> 
     <ChildElements> 
      <type name='xx' attr='false'> 
       <child id='1' regex='^[0-9]{11}$'> 
        <BBB> 
         <node1 name='aaa' regex='\w{5}'/> 
         <node2 name='bbb' regex='\w{3}'/> 
        </BBB> 
       </child> 
       <child> 
       . 
       . 
       . 
       </child> 
      </type> 
     </ChildElements> 
    </Root> 

Нечто подобное. Я хочу проанализировать его на объект документа xml и выполнить итерацию через его узлы, я использую libxml2 для ios.

NSString *xmlPath = [[NSBundle mainBundle] pathForResource:@"xmlcontent" ofType:@"xml"]; 
    NSData *xmlData = [NSData dataWithContentsOfFile:xmlPath]; 
    NSString* xml = [[NSString alloc ] initWithData:xmlData encoding:NSUTF8StringEncoding]; 
int size=[xml lengthOfBytesUsingEncoding:NSUTF8StringEncoding];  
xmlDocPtr docptr=xmlParseMemory([xml UTF8String], size); 

но в docptr объекта есть только один узел, который является Корневым узлом, и когда я пытаюсь получить корневой узел дочерних узлов возвращает пустой узел, имя которого @ «текст».
NSXMLParser легко анализирует один и тот же XML, но я не знаю, как создать документ и перебрать узлы с помощью NSXMLParser.

ответ

0

может быть ошибка, что ваш XML не Валиде:

<?xml version='1.0' encoding='utf-8' ?> 
<Root> 
    <ChildElements> 
     <type name='xx' attr='false' /> 
      <child id='1' regex='^[0-9]{11}$'> 
       <BBB> 
        <node1 name='aaa' regex='w{5}' /> 
        <node2 name='bbb' regex='w{3}' /> 
       </BBB> 
      </child> 

    </ChildElements> 
</Root> 

вы можете подтвердить свой XML с online XML Validator

+0

вы имеете в виду закрывающий тег для типа? я забыл поставить его, но он существует в коде :) – taffarel

+0

и тег close для ChildElements – CarlJ

+0

нет, он просто набирает его здесь с некоторыми ошибками, все в порядке, потому что NSXMLParser анализирует его успешно – taffarel