2012-05-29 37 views
0

我有一个我自己创建的xml文件。libxml2 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> 
       <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对象只有一个节点,即根节点,当我尝试获取Root节点的子节点,它返回一个空节点,其名称为@“文本”。
NSXMLParser可以轻松解析相同的XML,但我不知道如何使用NSXMLParser创建文档并遍历节点。

回答

0

也许是错误的,那你的XML是没有的Valide:

<?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> 

您可以用online XML Validator

+0

验证XML你的意思类型的结束标记?我忘了,但它在代码:) – taffarel

+0

和ChildElements – CarlJ

+0

没有它的存在,我只是有一些错误在这里输入的结束标记存在,一切都很好,因为的NSXMLParser解析它成功 – taffarel