代码之家  ›  专栏  ›  技术社区  ›  conorgriffin

应该采取什么步骤将XML转换为核心数据对象?

  •  2
  • conorgriffin  · 技术社区  · 14 年前

    我有一个包含商店列表的XML文件,下面是一个简化版本。我想要帮助的是一些关于将这些数据移动到对象中以存储在核心数据中的最简单方法的高级想法。我看到了关于键值对的建议,但正如您在下面的示例中看到的,我有具有相同名称/键的子元素,每个store元素可以有任意数量的子元素。

    <store-id>

    XML示例:

    <stores>
      <store>
       <store-id>1</store-id>
       <city>Dublin</city>
       <phone>011234567</phone>
       <phone>011234566</phone>
       <owner>Joe Bloggs</owner>
      </store>
      <store>
       <store-id>2</store-id>
       <city>Cork</city>
       <phone>019876543</phone>
       <phone>019876542</phone>
       <owner>Joe Bloggs</owner>
      </store>
    <stores>
    

    如果要使用键值对,请给我指出一个方法,在该方法中我可以解释重复的元素。如果有别的办法,我洗耳恭听。

    谢谢

    3 回复  |  直到 14 年前
        1
  •  5
  •   Ben Gottlieb    14 年前

    更难的是设计一个有意义的数据模型。您可能需要一个实体用于商店,一个实体用于电话,还有一个实体用于所有者。商店应该和电话号码一对多,和店主一对一(只看你的数据)。

    一旦建立了数据模型,就可以使用NSXMLParser或TouchXML之类的第三方库来解析XML。从你的元素开始。对于其中的每个项目,基于store实体创建一个对象。对于元素中的每个phone,创建phone实体,依此类推。

        2
  •  0
  •   Community Dai    7 年前

    我敢说,createas-you-parse方法可能不仅是最直接的方法,而且也是最少的资源密集型方法。如果您可以使用面向流的解析器来处理XML,并在完成解析时保存存储,那么每次在内存中保存的内容就少了很多。

    不幸的是,核心数据并不能提供一个很好的方法来处理一个多值属性,而这个属性不是一个关系(这里的电话号码看起来真的像是一个字符串数组 this SO question this cocoa-dev thread 讨论一下。

        3
  •  0
  •   Alex Gray    13 年前

    只是基本的,不多。。我真的搞不懂 您可以在第一次创建模型时指定。。但是数据存储的一个选择是as.plist,它 用于所有密集用途的XML。。。

    例如这个“老派”plist,直接从核心数据模型中提取。。

    (
    Editorial,
    News,
    Retraction,
    "FLAME!",
    )
    

    与此XML集的数据完全相同,一旦运行

    /usr/bin/plutil -convert xml1 /../input.plist -o /../output.xml

    <?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">
    <array>
        <string>Editorial</string>
        <string>News</string>
        <string>Retraction</string>
        <string>FLAME!</string>
    </array>
    </plist>