2012-12-19 1 views
4

큰 XML 파일 (40MB)을 스캔하고 NSFML을 사용하여 메모리 사용 공간을 줄여야합니다. 몇 가지 사항에 대해 각 노래를 확인한 다음 모든 기준을 통과하면 노래를 새 XML 파일에 씁니다.코코아에서 iTunes 라이브러리 XML 구문 분석

NSXMLParser를 사용하여 파일을로드하고 파일을 읽을 수 있습니다. 그래서 임은 어떻게 임시 변수로 각 노래를 저장합니까 궁금해? 그리고 어떤 종류의 객체가 저장되어야합니까 (Im은 무언가를 변경할 수 있다고 가정하기 때문에 파일에 쓰기 전에 더 많은 노래를 파일에 계속 추가 할 수 있습니다).

<key>Tracks</key> 
<dict> 
    <key>11072</key> 
    <dict> 
     <key>Track ID</key><integer>1107</integer> 
     <key>Name</key><string>Kids with Guns (Hot Chip Remix)</string> 
     <key>Artist</key><string>Gorillaz</string> 
     <key>Album</key><string>D-Sides</string> 
     <key>Genre</key><string>Britpop</string> 
     <key>Kind</key><string>MPEG audio file</string> 
     <key>Size</key><integer>844299</integer> 
     <key>Total Time</key><integer>42971</integer> 
     <key>Disc Number</key><integer>2</integer> 
     <key>Disc Count</key><integer>2</integer> 
     <key>Track Number</key><integer>6</integer> 
     <key>Track Count</key><integer>9</integer> 
     <key>Year</key><integer>2007</integer> 
     <key>Date Modified</key><date>2008-10-30T02:44:58Z</date> 
     <key>Date Added</key><date>2007-12-25T21:54:16Z</date> 
     <key>Bit Rate</key><integer>153</integer> 
     <key>Sample Rate</key><integer>44100</integer> 
     <key>Comments</key><string> __FIXED__U74A0ECA</string> 
     <key>Play Count</key><integer>1</integer> 
     <key>Play Date</key><integer>3292750639</integer> 
     <key>Play Date UTC</key><date>2008-05-04T20:57:19Z</date> 
     <key>Skip Count</key><integer>1</integer> 
     <key>Skip Date</key><date>2008-02-09T06:17:30Z</date> 
     <key>Artwork Count</key><integer>2</integer> 
     <key>Persistent ID</key><string>74A0ECAC8D</string> 
     <key>Track Type</key><string>File</string> 
     <key>Location</key><string>file://xxxxx/x/iTunes/Music/Gorillaz/D-Sides/2-06%20Kids%20with%20Guns%20(Hot%20Chip%20Remix).mp3</string> 
     <key>File Folder Count</key><integer>5</integer> 
     <key>Library Folder Count</key><integer>1</integer> 
    </dict> 

답변

1

원하는 모든 종류의 개체를 사용하십시오. 사전을 사용할 수도 있고, 자신에게 편리한 구조를 반영하고 추출하는 데이터의 구조를 반영하는 자신 만의 클래스를 만들 수도 있습니다. 명백한 기술은 최상위 파서 위임자가 NSMutableArray라는 속성을 가지므로이 코드에서와 같이 얻는대로 물건을 추가 할 수 있고 호출자가 결과 값을 가져올 수 있습니다.

NSURL* url = // obtain xml URL 
NSXMLParser* parser = [[NSXMLParser alloc] initWithContentsOfURL:url]; 
MyPeopleParser* people = [[MyPeopleParser alloc] init]; 
[parser setDelegate: people]; 
[parser parse]; 

MyPeopleParser에는 people이라는 사람의 NSMutableArray가 있습니다. 이제 우리는 그 속성의 값을 가져올 수 있습니다 (people.people, 죄송합니다). 배열은 이제 Person 객체로 가득 차 있습니다. 그러나 모든 것은 구현 세부 사항입니다. NSXMLParser를 사용하는 방법을 알아 냈다면 나머지는 그레이비 (gravy)라고 할 수 있습니다.

파일에 쓰는 것이 무슨 뜻인지 잘 모르겠습니다. XML 입니다. 그러나 필자의 경우 Person 클래스를 보관 가능하게 만들어 Person 객체의 NSArray를 .plist로 디스크에 직접 쓸 수 있습니다.

+0

명확히하기. 새로운 .xml 파일을 만들고 싶습니다 (내 바탕 화면에 말하기). 원본 XML 파일의 일부 노래. 지금 당장 Im은 임시 사전에 정보를 저장하는 것입니다. 그러나 Im은 원래의 XML과 동일한 형식으로 사전의 새 파일 (내 바탕 화면에)을 만드는 데 문제가 있습니다. – urbanrider

+0

무슨 문제가 있습니까? XML을 작성하는 것이 XML을 읽는 것보다 훨씬 쉽습니다. 왜 당신은 어려움을 겪고 있습니까? 아마 당신이 그 문제에 초점을 맞춘 완전히 다른 질문을한다면 더 좋을 것입니다. XML은 모든 객체 유형으로 쉽고 직접적이며 완벽하게 변환되지 않으므로 XML을 작성하기 위해 XML을 읽는다면 임시 변수를 사용하지 않는 것이 더 나을 것입니다. XML로 전체 시간. – matt