创建 XML 时如何有效地检查 NSDictionay 键是不是具有值

Posted

技术标签:

【中文标题】创建 XML 时如何有效地检查 NSDictionay 键是不是具有值【英文标题】:How to check if NSDictionay key has a value efficiently when creating XML创建 XML 时如何有效地检查 NSDictionay 键是否具有值 【发布时间】:2013-11-16 07:43:21 【问题描述】:

我正在目标 C 中创建一些 XML,我知道如何去做,但是我可能会将 800 多个值放入 XML 中,这些值是从 NSDictionaries 的 NSArray 中获取的。

所以我想知道是否有一种有效的方法来检查 NSString 类型的键值中的 nill 或 null。

目前这是我的代码的样子:

     NSMutableArray *xmlItems = [coreDataController readInstallForXML:selectedInstallID];

    for (int i = 0; i < [xmlItems count]; i++) 
        NSDictionary *currentXMLItem = [xmlItems objectAtIndex:i];

        [xmlWriter writeStartElement:@"Items"];
            [xmlWriter writeAttribute:@"insID" value:[currentXMLItem valueForKey:@"insID"]];
// there are about another 20 attributes I have to add here.
    

// then write end elemtent etc.

在上面的代码中,我没有添加任何检查,但我希望有人可以为我提供比为每个属性添加一堆 if 语句更好的东西。

【问题讨论】:

【参考方案1】:

您可以使用 [NSDictionary allKeysForObject:] 获取“nil”值的所有键,因此您有一个要忽略的键列表。

生成 800 个项目不一定是“多”或“慢”。无论如何,您都不想在主线程上执行此操作,因此请确保将其作为后台操作执行。

【讨论】:

说当我循环创建每个项目时,当前的 NSdictionary 对象可能与下一个对象具有不同的值(即,说一个键在循环的下一次迭代之前可能为空,那么它可能不是零……那么 allKeysForObject 的工作原理是什么? 你如何将 nil 值作为键?在遍历字典之前,只获取一次“allKeysForObject:”。在循环中,您可以根据“allKeysForObject”结果检查键以忽略所有空值。【参考方案2】:

使用 NSDictionary 上的 allKeys 方法返回一个 NSArray 键;然后遍历该数组并为每个键从字典中检索值并使用一个 if 语句在写出 xml 元素之前检查字符串

【讨论】:

但是如果我有 20 个 if 语句和数组中有 800 个项目,那会不会很慢。还没有在我的代码中显示它,但我还有大约 20 个属性需要添加。 哦,好吧,我想我误会了你。在我现在只是想找到一些关于它的信息之前,我从未使用过 allKeys。 是否有机会提供一小段示例代码?我只是以前从未使用过此功能。

以上是关于创建 XML 时如何有效地检查 NSDictionay 键是不是具有值的主要内容,如果未能解决你的问题,请参考以下文章

如何检查字符串是不是是有效的 XML 元素名称?

检查 JSON 和 XML 是不是有效? C#

如何有效地逐项比较两个大 XML 文件?

如何有效地检查表是不是为空?

如何有效地编辑大文件 XML?

如何有效地使用 Java 修改一小部分巨大的 XML