2011-07-23 92 views
0

我正在嘗試使用TouchXml爲此解析xml文件。不幸的是,我得到錯誤解析XML時得到錯誤

實體:行1:分析器錯誤:預期的開始標記,'<'沒有找到,即使解析示例 xml是絕對正確的。

代碼是:

NSString *path = [[NSBundle mainBundle] pathForResource:@"SampleXml" ofType:@"xml"]; 

NSData *xmlData = [[NSData alloc] initWithContentsOfFile:path]; 

NSMutableArray *result = [[NSMutableArray alloc] initWithCapacity:1]; 
CXMLDocument *doc = [[[CXMLDocument alloc] initWithData:xmlData options:0 error:nil]autorelease]; 

NSArray *nodes = NULL; 

nodes = [doc nodesForXPath:@"//nodeX" error:nil]; 

for(CXMLElement *node in nodes){ 
    NSMutableDictionary *item = [[NSMutableDictionary alloc] init]; 
    int counter; 

    for(counter = 0; counter < [node childCount]; counter++){ 

     NSString * value = [[[node childAtIndex:counter] stringValue] stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; 
     if(value){ 
     [item setObject:[[node childAtIndex:counter] stringValue] forKey:[[node childAtIndex:counter] name]]; 
     }} 

    [item setObject:[[node attributeForName:@"id"] stringValue] forKey:@"id"]; 
    [result addObject:item]; 
    [item release]; 
} 

NSLog(@"%@",result); 
} 

或許它與touchXml類的問題還是我做錯了什麼?請幫忙。

+1

您是否首先檢查了XML文件? –

+0

是的,它是正確的文件 –

+1

開始哪個最簡單: <? xml version =「1.0」?> 如果有效。 –

回答

0

當開始xml標記和其他節點之前/之間存在空格或換行符時,我有過類似的事情(不是在目標c中,而是在c#中)。刪除所有空白,看看是否能解決你的問題。

+0

我認爲問題可能與一個XML文件,雖然我已經檢查出來,然後我試圖用從互聯網上找到一個簡單的示例XML文件,這樣的: <仔豬ID =「1」> Nifnif <仔豬ID = 「2」> Nufnuf <仔豬ID = 「3」> Nafnaf BUT結果SAME –

+0

什麼線引發錯誤? 「nodes = [doc nodesForXPath:@」// nodeX「error:nil]; 」? –

+0

我認爲我知道哪部分代碼導致了問題。 touchxml現在工作正常,但問題實際上是白色的數據。當我從服務器和Nslog獲取數據時,我看到一長串字節,這意味着數據正常傳輸。但是當我嘗試將此數據轉換爲字符串時,使用NSUTF8StringEncoding字符串的nslog輸出爲(null)。當選擇[NSString defaultCStringEncoding]時,字符串的輸出是˛<並且使用ASCIIStringEncoding它是ÿþ<。但如果我問[數據長度]我得到123180,這意味着它是適當的數據,不僅三個字符 –

0

問題實際上是數據編碼。來自服務器的數據是unicode。我需要將它轉換爲utf8,然後才能解析數據。

要轉換數據,我首先將它存儲在NSString(initWithData dataUsingEncoding:NSUnicodeStringEncoding)中,然後從字符串中創建新的NSData。但我幾乎肯定,有一種更簡單的方法來將數據從一種編碼轉換爲其他編碼,而無需創建額外的字符串......任何幫助,將不勝感激。

+0

其實我認爲這可能是Olga的方式。恕我直言目標c仍然不是一個完全成熟的語言,仍然需要很多的工作,使其開發人員友好,即爲什麼沒有運算符超過字符串+字符串? ...這樣一個小型的操作,但尚不可用。在我的開發人員辦公室裏,這種冗長也是一個笑話 –