我有以下DTD-XML文件(来自MSAccess),并将使用它以编程方式创建我的CoreData模型。
此处的每个ELEMENT都成为一个实体,与列出的每个ATTLIST属性具有一对一的关系。
这甚至可能吗?
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT league (date, time, version, season, division+)>
<!ELEMENT date EMPTY>
<!ATTLIST date
year CDATA #REQUIRED
month CDATA #REQUIRED
date CDATA #REQUIRED
day CDATA #REQUIRED
>
<!ELEMENT division (team+)>
<!ATTLIST division
id CDATA #REQUIRED
label CDATA #REQUIRED
>
<!ELEMENT season EMPTY>
<!ATTLIST season
season CDATA #REQUIRED
>
<!ELEMENT sports-statistics (league)>
<!ELEMENT team EMPTY>
<!ATTLIST team
id CDATA #REQUIRED
city CDATA #REQUIRED
name CDATA #REQUIRED
alias CDATA #REQUIRED
>
<!ELEMENT time EMPTY>
<!ATTLIST time
hour CDATA #REQUIRED
minute CDATA #REQUIRED
second CDATA #IMPLIED
timezone CDATA #REQUIRED
utc-hour CDATA #REQUIRED
utc-minute CDATA #REQUIRED
>
<!ELEMENT version EMPTY>
<!ATTLIST version
number CDATA #REQUIRED
>
答案 0 :(得分:0)
当然可以。
如果您使用的是iOS,则可以使用内置的NSXMLParser
加载该文件并运行其内容。如果您希望加载文档并检查文档而不是获取解析器回调,请添加TouchXML。 [基本上,NSXMLParser
执行SAX样式的解析,TouchXML
使用DOM样式。“
加载XML后,您可以创建模型。 Core Data模型创建的每个方面都可用作Core Data API调用,因此您不需要使用模型编辑器。你想要
NSManagedObjectModel
NSEntityDescription
。使用[NSManagedObjectModel setEntities:]
将这些与模型相关联。NSAttributeDescription
,为实体类型之间的每个关系创建NSRelationshipDescription
s。使用[NSEntityDescription setProperties:]
将这些与实体描述相关联。NSManagedObjectModel
,以便每次应用启动时都不必执行此操作。 NSManagedObjectModel
没有任何自己的保存方法,但它符合NSCoding
,所以请使用它。请记住,在添加持久性存储文件之前,模型只是可变的。只有在没有数据的模型时才能更改它。加载数据后,必须将模型视为不可变。