TBXML XML格式

问题描述:

我已经知道TBXML如何解析它在我的Xcode项目。但是我被困在一个我不太了解的XML结构中。TBXML XML格式

这是XML结构:

<CurDate Dates="27.07.2012" Date="07/27/2012"> 
    <Currency Kod="USD" CurrencyCode="USD"> 
    <Unit>1</Unit> 
    <Name>AMERICA</Name> 
    <CurrencyName>US DOLLAR</CurrencyName> 
    <ForexBuying>1.81</ForexBuying> 
    <ForexSelling>1.8187</ForexSelling> 
    </Currency> 
    </CurDate> 

我想在这个XML结构的帮助。我的代码看起来像:

 TBXMLElement *elementName = [TBXML childElementNamed:@"Currency" parentElement:element]; 
     TBXMLElement *altinTemp = [TBXML childElementNamed:@"CurrencyName" parentElement:elementName]; 

这是我的方式来获取我的XML的CurrencyName,但我得到一个错误。见代码:

+ (TBXMLElement*) childElementNamed:(NSString*)aName parentElement:(TBXMLElement*)aParentXMLElement{ 
TBXMLElement * xmlElement = aParentXMLElement->firstChild; 
const char * name = [aName cStringUsingEncoding:NSUTF8StringEncoding]; 
while (xmlElement) { 
    if (strlen(xmlElement->name) == strlen(name) && memcmp(xmlElement->name,name,strlen(name)) == 0) { 
     return xmlElement; 
    } 
    xmlElement = xmlElement->nextSibling; 
} 
return nil; 
} 

这是我得到一个错误。错误是“主题1:!EXC_BAD_ACCESS(代码= 2,地址= 0x10),以

任何答复,将好的给我看

+0

请将完整的错误消息添加到您的问题。 – Codo 2012-07-28 18:57:44

+0

我在上面添加了错误消息... – BlackJack 2012-07-28 19:20:13

+0

修改后的问题现在显示完整的错误消息。但它不再说明它出现在哪一行。无论如何,这是一个空指针访问。这意味着参数* aParentXMLElement *被传递为零。所以错误的真正来源甚至更早。但从你问题中的信息来看,我无法分辨。 – Codo 2012-07-28 22:04:17

我相信你想是这样的

NSError *error = nil; 
TBXML* tbxml = [TBXML tbxmlWithXMLString:@"<CurDate Dates='27.07.2012' Date='07/27/2012'><Currency Kod='USD' CurrencyCode='USD'><Unit>1</Unit><Name>AMERICA</Name><CurrencyName>US DOLLAR</CurrencyName><ForexBuying>1.81</ForexBuying><ForexSelling>1.8187</ForexSelling></Currency></CurDate>" error:&error]; 

if (error) { 
    NSLog(@"%@ %@", [error localizedDescription], [error userInfo]); 
} else { 
// If TBXML found a root node, process element and iterate all children 
    if (tbxml.rootXMLElement){ 
     TBXMLElement *element = tbxml.rootXMLElement; 

     if ([TBXML childElementNamed:@"Currency" parentElement:element]) { 

      element = element->firstChild; 

      do{ 
       TBXMLElement *altinTemp = [TBXML childElementNamed:@"CurrencyName" parentElement:element]; 
       NSString *currencyName = [TBXML textForElement:[TBXML childElementNamed:@"CurrencyName" parentElement:element]]; 
       NSLog(@"%@",currencyName); 
      }while ((element = element->nextSibling)); 

      error = nil; 
     } 
    } 
} 

一个替代到

childElementNamed: parentElement: 

childElementNamed: parentElement: error: 

它允许你处理无节点(我认为你有)。错误:也可以添加到大多数TBXML类函数中,它会削减性能,所以最好仅用于调试或节点/值可能存在或不存在的时间。