JSON/XML 解析 iPhone NSPredicate

发布于 2024-10-20 20:57:59 字数 1482 浏览 3 评论 0原文

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

我有很多“观点”,我只想从她的 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

I'm trying to create a little apps which use xml or json to display some content.

I'have a lot of "views" and i want to select just one from her id.

XML look like that (i can put json if you want but it's very hard to read) :

<?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>

I have an array which contain 3 NSDictionary (the 3 view).

How can i select juste one view by her id ?

Thanks by advance

BiB1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

我的影子我的梦 2024-10-27 20:57:59

您不能直接在 XML 上使用 NSPredicate。您必须将 XML(或 JSON)解析到一些标准的 Cocoa 容器(NSArray 等)中,然后使用它。

能够直接过滤 XML 的唯一方法是使用 XPath 之类的东西,尽管您必须使用 libxml 才能做到这一点。

You can't use NSPredicate on XML directly. You'll have to parse the XML (or JSON) into some standard Cocoa container (NSArray, etc) and then use it on that.

The only way you'd be able to filter the XML directly is to use something like XPath, though you'd have to drop to libxml to do that.

百善笑为先 2024-10-27 20:57:59

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

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

It should work - as long as the data variable is actually an array containing a dictionary with the key "id"

NSArray *data =  <your xml>
NSString *currentViewId = @"home";
NSArray *filterd = [data filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(id == %@)", currentViewId]];
别闹i 2024-10-27 20:57:59

尝试将 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'

Try reformatting the xml as a plist (you could use xcodes plist editor or roll your own) use:

<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

In .h file:

NSArray *Views_List;

In .m file:

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

then to access each dict:

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

In this example (0) will return 'Home'

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文