2011-03-09 96 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