2015-11-08 57 views
0

如何獲取AttributeDict的解析器函數來獲取列(名稱,短期和日期)? (代碼如下)我嘗試了一些,但它不工作,也沒有從谷歌找到任何幫助。XML Parse快速訪問attributeDict

這裏的xml文件:

<?xml version="1.0" encoding="windows-1257"?> 
<timetable ascttversion="2015.5.5" importtype="database" options="daynumbering1,idprefix:Oman" displayname="Oman XML" displaycountries="om" displayinmenu="0"> 


    <days options="canadd,canremove,canupdate,silent" columns="name,short,day"> 

     <day name="Esmasp‰ev" short="Es" day="1"/> 
     <day name="Teisip‰ev" short="Te" day="2"/> 
     <day name="Kolmap‰ev" short="Ko" day="3"/> 
     <day name="Neljap‰ev" short="Ne" day="4"/> 
     <day name="Reede" short="Re" day="5"/> 
    </days> 
</timetable> 

下面是函數:

func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [NSObject : AnyObject]) { 
    elementName 
    print("\(elementName)") 
// if attributeDict == ["Name" : "Esmaspäev"] { 
//  print("\(attributeDict)") 
// } 
    if elementName == "day" 
    { 
     if elementName == "day"{ 
      passName=true; 
     } 
     passData=true; 
    } 
} 
+0

我個人不喜歡的NSXMLParser的API,它也有壞的表現,而不是使用方便。試試這個https://github.com/cezheng/Fuzi – cezheng

+0

在創建一個XMLDocument實例後,你可以使用document.root.firstChild(tag:「days」)來獲取元素,然後daysElement.children爲你提供一個數組元素,你可以像使用下標一樣訪問屬性,如dayElement [「name」],dayElement [「short」],dayElement [「day」] – cezheng

+0

carthage只是導入庫的3種方法之一。您也可以使用cocoapods或手動導入 – cezheng

回答

1
import Fuzi 

func parse() { 
    do { 
     // Read the xml file as String 
     guard 
      let path = NSBundle.mainBundle().pathForResource("arvestusDays", ofType: "xml") 
     else { 
      print("XML file does not exist.") 
      return 
     } 
     let xmlString = try String(contentsOfFile: path, encoding: NSUTF8StringEncoding) 

     // Parse the xml string 
     let doc = try XMLDocument(string: xmlString) 

     if let days = doc.root.firstChild(tag: "days") { 
      for day in days.children { 
       print(day["name"]) 
       print(day["short"]) 
       print(day["day"]) 
      } 
     } 
    } catch let error { 
     print(error) 
    } 
} 

我沒有在Mac和我所以我現在不能運行測試它,但這個代碼應該工作。如果沒有,請評論。

UPDATE:

如果您有編碼問題,可以嘗試創建的XMLDocument從NSData的,而不是從字符串:

 let xmlData = NSData(contentsOfFile: path) 

     // Parse the xml string 
     let doc = try XMLDocument(data: xmlData!) 
+0

嗯,代碼沒有拋出任何錯誤,但在調試區域沒有打印值,它好像代碼不做任何事情?爲什麼它不顯示調試器區域中的打印值? –

+0

我不知道如果它是解析值或不,因爲它不打印任何值到調試區域。我能否以某種方式檢查解析是否成功? –

+0

我測試了它與您的xml文件一起工作的代碼。注意我只是把代碼放到函數解析()中,你必須改變它來適應你的應用程序的需要,好嗎? – cezheng