【问题标题】:Extract array from XML dictionary从 XML 字典中提取数组
【发布时间】:2018-11-04 03:19:32
【问题描述】:

是否可以从下面的 XML 文件中提取有序的键数组:

基本上我想要的是一个看起来像这样并按以下顺序排列的数组: ["key1","key2","myKey3","key4","key5"]

问题是,如果我先转换为 NSDictionary 然后循环遍历键,我会丢失顺序。

我希望能够在不更改网络服务器的情况下做到这一点。

提前致谢

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>key1</key>
    <array>
        <string></string>
        <string>title1</string>
        <string>disabled</string>
    </array>
    <key>key2</key>
    <array>
        <string></string>
        <string>title2</string>
        <string>disabled</string>
    </array>
    <key>myKey3</key>
    <array>
        <string></string>
        <string>title3</string>
    </array>
    <key>key4</key>
    <array>
        <string></string>
        <string>title4</string>
        <string>disabled</string>
    </array>
    <key>key5</key>
    <array>
        <string></string>
        <string>title5</string>
        <string>disabled</string>
    </array>
</plist>

【问题讨论】:

  • 不要考虑字典中的顺序,否则您误解了它的用途。字典中的顺序不应该很重要,因为访问是通过键而不是索引。这似乎更像是一个 plist 文件(简单的转换方法),而不是一个“真正的”xml(解析更复杂)。
  • 谢谢,但也许你误解了我的问题。我希望将该 XML 文件转换为数组。如果我将它转换为字典,然后转换为数组,它将不会保持 b/c 的顺序,字典是无序的集合。这是来自 plist 的,但它与我要求在网络服务器上发布的文件完全相同,所以我定义了。需要解析。

标签: objective-c xml parsing nsarray


【解决方案1】:

您可以使用NSXMLParser。你需要实现 NSXMLParserDelegate 并且在parser:didStartElement: 中如果elementName 等于“键”,那么在下一个parser:foundCharacters: 调用中你将键值添加到NSMutableArray 中。最后你会得到一个有序的键数组。

当您拥有订购的密钥后,您可以使用它们来遍历您按顺序拥有的NSDictionary(下面的dict):

for (NSString *key in orderedKeys) {
    NSArray *properties = dict[key];
    ...
}

查看具体代码示例 - NSXMLParser Simple Example

【讨论】:

  • 有趣的谢谢。我明天会检查一下,让你知道它是如何工作的。
  • 谢谢。这非常有效。很酷,大多数人实际上都想在这里提供帮助,而不是仅仅为它投反对票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多