JSON / XML解析iphone NSPredicate

时间:2011-03-09 21:02:05

标签: iphone xml json parsing nspredicate

我正在尝试创建一些使用xml或json显示某些内容的应用程序。

我有很多“观点”,我想从她的身份中选择一个。

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视图)的数组。

如何通过她的身份选择一个视图?

先谢谢

BiB1

3 个答案:

答案 0 :(得分:0)

您无法直接在XML上使用NSPredicate。您必须将XML(或JSON)解析为一些标准Cocoa容器(NSArray等),然后在其上使用它。

你能够直接过滤XML的唯一方法是使用像XPath这样的东西,尽管你必须使用libxml来做到这一点。

答案 1 :(得分:0)

它应该工作 - 只要数据变量实际上是一个包含键“id”的字典的数组

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

答案 2 :(得分: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)将返回“Home”