2011-05-21 114 views
7

我有其中包含了一些數據,我想用一個XML文件:解析XML文件 - 獲取值

<?xml version="1.0" encoding="UTF-8" ?> 

<items> 
<item name="product" price="19.95" where="store"> 
This is the first product. 
</item> 

<item name="product2" price="39.95" where="online"> 
This is the second product. 
</item> 

<item name="product3" price="99.95" where="garagesale"> 
This is the third product. 
</item> 

</items> 

如果我做了4個陣列,一個名字,一個是價格,一個用於購買它的地方,一個用於描述,我如何將數據存入數組?

我想通過使用NSXMLParser,但不能得到nameprice,where或描述。

我被困在如何做到這一點。

任何幫助表示讚賞。

+1

你讀過[the guide](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/XMLParsing/Articles/HandlingElements.html)嗎? – 2011-05-21 12:17:45

+0

[在iPhone上進行XML解析的最佳方法]的可能重複(http://stackoverflow.com/questions/842292/best-approach-for-xml-parsing-on-the-iphone)或[Simple XML Parsing]( http://stackoverflow.com/questions/3616447/parsing-xml-code-on-iphone-sdk(http://stackoverflow.com/questions/3616447/parsing-xml-code-on-iphone-sdk)解決XML的問題(http://stackoverflow.com/questions/3616447/parsing-xml-code-on-iphone-sdk) )或[在可可中解析XML](http://stackoverflow.com/questions/1089737/parsing-xml-in-cocoa)或[NSXMLParser on iPhone如何使用它?](http://stackoverflow.com/問題/ 2964503 /)。拿你的選擇。 – 2011-05-21 17:06:31

+0

這是一個很好的教程,但有一件事我沒有得到幫助。你能告訴我,我怎樣才能讀取字符串「這是第一個產品」。 – 2012-04-08 15:53:31

回答

15

首先,你需要創建一個對象,做了解析。它將安裝NSXMLParser實例,將其自身設置爲解析器的delegate,然後調用解析消息。它也可以負責存儲四位結果數組:

NSXMLParser * parser = [[NSXMLParser alloc] initWithData:_data]; 
[parser setDelegate:self]; 
BOOL result = [parser parse]; 

你最感興趣的是你的委託對象實施的信息是didStartElement。這個人被調用你的XML文件中的每個元素。在這個回調中,你可以添加你的名字,價格&其中屬性到它們各自的數組。

- (void)parser:(NSXMLParser *)parser 
didStartElement:(NSString *)elementName 
    namespaceURI:(NSString *)namespaceURI 
qualifiedName:(NSString *)qualifiedName 
    attributes:(NSDictionary *)attributeDict 
{ 
    // just do this for item elements 
    if(![elementName isEqual:@"item"]) 
     return; 

    // then you just need to grab each of your attributes 
    NSString * name = [attributeDict objectForKey:@"name"]; 

    // ... get the other attributes 

    // when we have our various attributes, you can add them to your arrays 
    [m_NameArray addObject:name]; 

    // ... same for the other arrays 
} 
+0

謝謝,我現在對NSXMLParser有了一些瞭解。 – 2011-05-21 13:14:25

+0

@ jack-greenhill沒問題:) – RedBlueThing 2011-05-22 01:20:53

0

你必須要考慮項目的標籤的字典作爲數組和三個標籤(名稱,價格,在哪裏)爲對象的指數0,1,2

3
在follwing方法

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict { 

    if([elementName isEqualToString:@"item"]) { 

     NSString *name=[attributeDict objectForKey:@"name"]; 
     NSString *price=[attributeDict objectForKey:@"price"]; 
     NSString *where=[attributeDict objectForKey:@"where"]; 
    } 
} 
3

爲了讓標籤(例如 「這是第一個產品」。)您可以覆蓋之間的值 - (空)解析器:(的NSXMLParser *)解析器foundCharacters:(NSString *)字符串

+0

請問您能否詳細說明如何做到這一點?我有確切的要求,即獲得標籤之間的值。 – 2014-06-28 14:15:16