2012-07-28 69 views
0

我已經知道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

回答

0

我相信你想是這樣的

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類函數中,它會削減性能,所以最好僅用於調試或節點/值可能存在或不存在的時間。