2010-02-19 3 views
2

XML 파일에 상점 목록이 포함되어 있습니다. 간체 버전은 아래에 있습니다. 제가 도와 드리고 싶은 부분은이 데이터를 코어 데이터에 저장하기위한 객체로 옮기는 가장 간단한 방법에 대한 몇 가지 고급 아이디어입니다. 키 - 값 쌍에 대한 제안 사항이 있지만 아래 예제에서 볼 수 있듯이 이름/키가 같은 하위 요소가 있으며 각 스토어 요소에 대해 임의의 개수가있을 수 있습니다.XML을 Core Data 객체로 변환하기 위해 수행해야 할 단계는 무엇입니까?

향후 사용을 위해이 객체를 앱에 저장하려고합니다 (주석이지도에 표시됨). 따라서 각 중복 필드를 저장해야하며 그 중 하나는 충분하지 않습니다. 코어 데이터에서 모델을 작성하는 방법을 알고 있습니다. 전화 번호 엔티티와 상점 엔티티가 있으며, <store-id>을 기반으로 두 모델을 연결합니다. XML 데이터를 다른 데이터 구조를 통해 핵심 데이터로 이동시키는 간단한 방법을 사용하려고합니다.

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> 

, 나는 중복 요소를 설명 할 수있는 방법으로 날 지점하시기 바랍니다. 다른 방법이 있다면, 나는 모두 귀입니다.

감사합니다.

+0

를 통해 실행입니까? 예를 들어, 각 중복 필드의 모든 값을 유지해야합니까? 그들을 검색하거나 표시해야합니까? 어떤 모델링 문제와 마찬가지로, 상황은 트레이드 오프를 판단하는 데 중요합니다. –

+0

Thanks @Sixten Otto 질문을 업데이 트하겠습니다 – conorgriffin

답변

5

어려운 부분은 의미있는 데이터 모델을 디자인하게 될 것입니다. 아마도 상점 용 엔티티, 전화 용 엔티티 및 소유자 용 엔티티가 필요할 것입니다. 스토어는 전화 번호가있는 일대 다 (one-to-many), 소유자 (데이터 만보고있는)와 일대일이어야합니다.

일단 데이터 모델이 배치되면 NSXMLParser 또는 TouchXML과 같은 타사 라이브러리를 사용하여 XML을 구문 분석 할 수 있습니다. 요소로 시작하십시오. 거기에있는 각 항목에 대해 저장소 엔터티를 기반으로 개체를 만듭니다. 요소의 각 전화에 대해 전화 엔터티를 만드는 등의 작업을 수행합니다.

+0

그래서 파싱 할 때 파리에서 객체를 만드는 것이 가장 간단한 방법입니까? 모든 성능이 그렇게하는 데 영향을 줍니까? 나는 그것이 파싱에 관해서 약간의 합병증을 나타낼 수 있다고 생각하고있는 일대 다 관계라고 생각한다. 그러나 각 휴대 전화 요소에 대한 전화 개체를 즉석에서 만들면 상황을 조금 단순화 할 수 있습니다. 그러나 250 개가 넘는 엔티티가 예제에있는 것보다 많기 때문에 성능에 대해 조금 생각하고 있습니다. 추신 : 소유자는 실제로 저장되지 않습니다. 나는 샘플 필드로만 붙였습니다. – conorgriffin

+0

@Ben Gottlieb - 명확히하기 위해, 나는 물건의 파싱 측면에 익숙하지만, 다음 단계는 도움이 필요한 부분입니다. 감사합니다. – conorgriffin

+0

파싱 할 때 성능이 저하 될 수 있으므로 백그라운드에서 수행하는 것이 좋습니다. 그러나 장치와 핵심 데이터 기능 모두에서 당신은 잘 할 수 있습니다. –

0

필자가 작성한 구문 분석 접근법은 가장 직접적 일뿐만 아니라 자원 집약적 인 접근 방법이 아닐 수도 있습니다. 스트림 지향 파서를 사용하여 XML을 처리하고 구문 분석을 마치면 저장소를 저장할 수 있다면 한 번에 메모리에 보관해야하는 작업이 훨씬 적습니다.

속성이 본격적인 엔티티인지, 아니면 상점의 속성인지 여부에 대해서도 진지하게 생각하고 있습니다. 예를 들어지도에 표시하지 않고 소유자의 이름으로 무엇을하고 싶습니까? (예, 특정 사례에 대한 귀하의 의견이 단지 예일뿐입니다.) 불행하게도 Core Data는 관계가 아닌 다중 값 속성을 수행하는 좋은 방법을 제공하지 않습니다. (전화 번호는 실제로 문자열의 배열 일 수있는 것처럼 보입니다.) 이에 대한 설명은 this SO questionthis cocoa-dev thread을 참조하십시오.

0

기본 수준에 그다지 ... 전혀 알 수 없습니다. 여기서을 지정합니다. 어쩌면 처음에 모델을 만들었지 만 데이터 저장소에 대한 선택 사항 중 하나는 다음과 같습니다. plaster, 모든 집중적 인 목적을위한 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> 
관련 문제