2011-03-09 95 views
0

我正在嘗試創建一些使用xml或json顯示一些內容的應用程序。JSON/XML解析iphone NSPredicate

我有很多「意見」,我想從她的ID中選擇一個。

XML看起來像(我可以把JSON如果你想,但它是非常難讀):

<?xml version="1.0" encoding="utf-8"?> 
<views> 
    <view id="home" type="nav"> 
     <title>Help</title> 
     <section id="1"> 
     <title>Aide</title> 
     <item id="1" link="dev_mac">Dev Mac</item> 
     <item id="2" link="dev_iphone">Dev iPhone</item> 
     <item id="3" link="examples">Examples</item> 
     </section> 
    </view> 
    <view id="dev_mac" type="nav"> 
     <nav_title>Help</nav_title> 
     <content_title>Dev Mac</content_title> 
     <text>balbalbalblablablalbalblalbal</text> 
     <section id="1"> 
     <item id="1" link="lesson_1">Lesson 1</item> 
     <item id="2" link="download">Downlaod</item> 
     </section> 
    </view> 
    <view id="download" type="content"> 
     <nav_title>Dev Mac</nav_title> 
     <title>Lesson 1</title> 
     <content_text>balblablalbalblalbalb</content_text> 
     <content_title>A. UIKit</content_title> 
     <content_text>UIKit is .....</content_text> 
    </view> 
</views> 

我有包含3的NSDictionary(3視圖)的陣列。

我該如何選擇正確的一個視圖,由她的ID?

由於通過提前

BiB1

回答

0

不能直接使用XML的NSPredicate。你必須將XML(或JSON)解析爲一些標準的可可容器(NSArray等),然後在其上使用它。

你能夠直接過濾XML的唯一方法是使用XPath之類的東西,儘管你必須下載到libxml才能做到這一點。

+0

是的,我知道,我不想直接在XML使用NSPredicate。我的XML數據用XMLReader轉換成NSDictionary。但我不知道如何使用NSPredicate從我的NSDictionary(或NSArray) – Mickael 2011-03-09 21:28:02

0

它應該工作 - 只要數據變量實際上是一個包含字典的鍵「ID」

NSArray *data = <your xml> 
NSString *currentViewId = @"home"; 
NSArray *filterd = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(id == %@)", currentViewId]]; 
0

嘗試重新格式化XML是plist數組(你可以使用xcodes的plist編輯器或卷你自己的)使用方法:

<plist version="1.0"> 
<array> 
    <dict> 
     <key>Title</key><string>Home</string> 
     <key>Image</key><string>Home.png</string> 
    </dict> 
    <dict> 
     <key>Title</key><string>Car</string> 
     <key>Image</key><string>Car.png</string> 
    </dict> 
</array> 
</plist 

在.h文件中:

NSArray *Views_List; 

在.m文件:

NSString *Views_DataPath = [[NSBundle mainBundle] pathForResource:@"nameOfYourPlist" ofType:@"plist"]; 
    Views_List = [[NSArray alloc] initWithContentsOfFile:Views_DataPath]; 

然後訪問每個字典:

[[Views_List objectAtIndex: 0] valueForKey:@"Title"]; 

在這個例子中(0)將返回 '家'

+0

id是否選擇「父項」,不幸的是我不能使用objectAtIndex在視圖以不同的順序發送的情況下 – Mickael 2011-03-10 13:24:35