2015-11-15 2 views
-1

Я хотел бы разобрать расписание учеников только для ученика «Карли». Задача здесь означает - классы. Поэтому мне нужно сначала обратиться к студенческой информации и узнать ученика, чье имя «Карли», а затем выполнить задачу для нее. Вот мой XML:как разобрать xml для определенного элемента в swift

<?xml version="1.0"?> 
<students-scheule-information> 
    <student-schedule> 
     <student-info> 
      <name>Jiyoon Lee</name> 
      <phone>765-637-8532</phone> 
      <uniqueID>S201501</uniqueID> 
     </student-info> 
     <week-schedule> 
      <task> 
       <notificationID>notification1_1</notificationID> 
       <date>20151112</date> 
       <starttime>1200</starttime> 
       <endtime>1305</endtime> 
       <location>knoy376</location> 
       <title>Math</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_2</notificationID> 
       <date>20151111</date> 
       <starttime>1200</starttime> 
       <endtime>1305</endtime> 
       <location>knoy376</location> 
       <title>History</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_3</notificationID> 
       <date>20151113</date> 
       <starttime>0930</starttime> 
       <endtime>1200</endtime> 
       <location>knoy376</location> 
       <title>Geography</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_4</notificationID> 
       <date>20151109</date> 
       <starttime>1200</starttime> 
       <endtime>1735</endtime> 
       <location>knoy376</location> 
       <title>Art</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_5</notificationID> 
       <date>20151109</date> 
       <starttime>2000</starttime> 
       <endtime>2100</endtime> 
       <location>knoy376</location> 
       <title>Intermediate German</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
     </week-schedule> 
    </student-schedule> 
    <student-schedule> 
     <student-info> 
      <name>Karly</name> 
      <phone>765-637-8222</phone> 
      <uniqueID>S201502</uniqueID> 
     </student-info> 
     <week-schedule> 
      <task> 
       <notificationID>notification3</notificationID> 
       <date>20151109</date> 
       <starttime>2210</starttime> 
       <endtime>2305</endtime> 
       <location>knoy376</location> 
       <title>Chemisrty</title> 
       <comments>Cool</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_5</notificationID> 
       <date>20151109</date> 
       <starttime>2000</starttime> 
       <endtime>2100</endtime> 
       <location>knoy376</location> 
       <title>History</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_5</notificationID> 
       <date>20151112</date> 
       <starttime>2000</starttime> 
       <endtime>2100</endtime> 
       <location>knoy376</location> 
       <title>Math</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_5</notificationID> 
       <date>20151111</date> 
       <starttime>1130</starttime> 
       <endtime>1420</endtime> 
       <location>knoy376</location> 
       <title>Biology</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
      <task> 
       <notificationID>notification1_5</notificationID> 
       <date>20151113</date> 
       <starttime>1000</starttime> 
       <endtime>1300</endtime> 
       <location>knoy376</location> 
       <title>Geography</title> 
       <comments>good</comments> 
       <image>X</image> 
       <ischeckable>true</ischeckable> 
       <repeatnum>3</repeatnum> 
       <repeatinterval>5</repeatinterval> 
      </task> 
     </week-schedule> 
    </student-schedule> 
</students-scheule-information> 

У меня есть этот код здесь для NSXMLParser, который показывает все для студентов:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String]) { 

    anElement = elementName 
     if elementName == "task" { 
       title = String() 
      } 

} 

func parser(parser: NSXMLParser, foundCharacters string: String) { 
    let data = string.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet()) 
    if (!data.isEmpty) { 
    switch anElement { 
     case "title": 
     aTitle = data 
     case "starttime": 
     aStartTime = data 
     case "endtime": 
     anEndTime = data 
     case "location": 
     aLocation = data 
    default: 
     print("Check your file") 
    } 


    } 
} 


func parser(parser: NSXMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
    if elementName == "task" { 
     let oneClass: TheClass = TheClass() 
     oneClass.title = aTitle 
     oneClass.location = aLocation 
     oneClass.startTime = aStartTime 
     oneClass.endTime = anEndTime 
     oneClass.classColor = aClassColor 
     classList.append(oneClass) 

    } 
} 

Спасибо большое !!!

+0

В чем вопрос? – matt

+0

Я хотел бы разбирать задания только для ученика «Карлы». –

+0

Ну, этого не произойдет, потому что у вас нет парсера для ''. Ваш парсер предназначен только для ''. – matt

ответ

0

Не имеет смысла писать парсер для специализированной задачи поиска. Лучше, если возможно, разобрать весь XML и работать с результатами. Ваш XML чрезвычайно прост и легко может быть проанализирован в объекты Swift.

Так что я хотел бы сделать, это написать свой парсер, чтобы прочитать весь XML и создать массив student объектов, где каждый student объекта имеет name свойство, а phone собственности, uniqueID собственности, и tasks недвижимости. Свойством tasks будет массив из task объектов, где каждый task имеет свойства, соответствующие подэлементам элемента <task>.

Теперь у вас есть массив Swift, так что будет тривиально найти student, name - "Karly" и проконсультируйтесь с задачами ученика. XML исчезнет; вы будете полностью работать с объектами Swift и можете делать все, что хотите, с данными.

 Смежные вопросы

  • Нет связанных вопросов^_^