2017-05-11 6 views
-1

Ich habe versucht, die Xml-Daten zu analysieren, die ich habe. Aber ich weiß nicht, was ich nicht in der Lage bin, die Daten im Bildschirm sowie in der Konsole zu drucken.ios swift 3 xml Parsing und Anzeigen der Daten

für meine api:

Request-type : GET 
Content-type : application/xml 
url : www.example.com/data 

hier meine tatsächliche Struktur xml:

<?xml version='1.0' encoding='UTF-8'?> 
<map> 
    <data> 
     <list> 
      <item> 
       <map> 
        <answerChoice> 
         <list> 
          <item>option1</item> 
          <item>option2</item> 
          <item>option3</item> 
          <item>option4</item> 
         </list> 
        </answerChoice> 
        <assessmentID>ajhsdja</assessmentID> 
        <explanation>Explanations.</explanation> 
        <question>Which is ur name?</question> 
        <questionType>multiple</questionType> 
        <correctAnswer>option1</correctAnswer> 
       </map> 
      </item> 
      <item> 
       <map> 
        <answerChoice> 
         <list> 
          <item>option1</item> 
          <item>option2</item> 
          <item>option3</item> 
          <item>option4</item> 
         </list> 
        </answerChoice> 
        <assessmentID>ajhsdja</assessmentID> 
        <explanation>Explanations.</explanation> 
        <question>Which is ur name?</question> 
        <questionType>multiple</questionType> 
        <correctAnswer>option1</correctAnswer> 
       </map> 
      </item> 
      <item> 
       <map> 
        <answerChoice> 
         <list> 
          <item>option1</item> 
          <item>option2</item> 
          <item>option3</item> 
          <item>option4</item> 
         </list> 
        </answerChoice> 
        <assessmentID>ajhsdja</assessmentID> 
        <explanation>Explanations.</explanation> 
        <question>Which is ur name?</question> 
        <questionType>multiple</questionType> 
        <correctAnswer>option1</correctAnswer> 
       </map> 
      </item> 
      <item> 
       <map> 
        <answerChoice> 
         <list> 
          <item>option1</item> 
          <item>option2</item> 
          <item>option3</item> 
          <item>option4</item> 
         </list> 
        </answerChoice> 
        <assessmentID>ajhsdja</assessmentID> 
        <explanation>Explanations.</explanation> 
        <question>Which is ur name?</question> 
        <questionType>multiple</questionType> 
        <correctAnswer>option1</correctAnswer> 
       </map> 
      </item> 
      <item> 
       <map> 
        <answerChoice> 
         <list> 
          <item>option1</item> 
          <item>option2</item> 
          <item>option3</item> 
          <item>option4</item> 
         </list> 
        </answerChoice> 
        <assessmentID>ajhsdja</assessmentID> 
        <explanation>Explanations.</explanation> 
        <question>Which is ur name?</question> 
        <questionType>multiple</questionType> 
        <correctAnswer>option1</correctAnswer> 
       </map> 
      </item> 
     </list> 
    </data> 
</map> 

Und mein Code, ich versuchte:

 import UIKit 

     class ViewController: UIViewController,XMLParserDelegate { 

      var strXMLData:String = "" 
      var currentElement:String = "" 
      var passData:Bool=false 
      var passName:Bool=false 
      var parser = XMLParser() 

      @IBOutlet var questNameData : UILabel! = nil 
      @IBAction var button1 : UIButton! = nil 
     @IBAction var button2 : UIButton! = nil 
     @IBAction var button3 : UIButton! = nil 
      @IBAction var button4 : UIButton! = nil 

      override func viewDidLoad() { 
       super.viewDidLoad() 

       let url:String="http://exampe.com/exc" 
       let urlToSend: URL = URL(string: url)! 
       // Parse the XML 
       parser = XMLParser(contentsOf: urlToSend)! 
       parser.delegate = self 

       let success:Bool = parser.parse() 

       if success { 
        print("parse success!") 




       } else { 
        print("parse failure!") 
       } 
      } 

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


     } 

    func parser(_ parser: XMLParser, didEndElement elementName: String, namespaceURI: String?, qualifiedName qName: String?) { 
    } 

    func parser(_ parser: XMLParser, foundCharacters string: String) { 

    } 

    func parser(_ parser: XMLParser, parseErrorOccurred parseError: Error) { 

    } 


} 

nun der Bildschirm, ich brauche zu zeigen ist wie folgt:

**QUESTION LABEL 

    ANSWER 1 
    ANSWER 2 
    ANSWER 3 
    ANSWER 4** 

Also muss ich jede id Frage anzuzeigen und die Antwort dieser speziellen Frage ..

ich viel Suche nicht in der Lage in Google versucht, die Lösung danach zu finden. Jede Hilfe wäre nützlich.

Vielen Dank im Voraus!

Erste hinzufügen, um diese XMLReader Dateien in Ihrem Projekt:

+0

Besser, XML zu Json über 3rd Party Bibliothek zu konvertieren. https://github.com/amarcadet/XMLReader und dann mit json umgehen. –

+0

@heilung miglani wie kann ich es von meinem code konvertieren oder dass shoyld ein anderes teil sein ?? wie ich brauche meine XML-URL zu konvertieren oder sollte ich analysieren müssen und dann sollte ich tun, um zu konvertieren json .. wenn möglich können Sie mir einige Codebeispiel zeigen ?? –

+0

Sie erhalten dieses XML in einer API-Antwort? –

Antwort

0

Sie können Ihr XML Antwort auf JSON Format wie unten Schritte konvertieren. Sie können es hier herunterladen: github.com/amarcadet/XMLReader

Nun müssen Sie die XML-Daten aus Ihrem API erhalten

Jetzt eine Funktion erstellen xml in json Format lesen wie,

func ReadXML(xml : String) { 
    do { 
     let dic = try? XMLReader.dictionary(forXMLString: xml) 

     let json = try? JSONSerialization.data(withJSONObject: dic! as [AnyHashable : Any], options: .prettyPrinted) 

     let resDic = try? JSONSerialization.jsonObject(with: json!, options: .allowFragments) 

     print(resDic) 
    } catch 
    { 
    } 

} 

Sie können dies nutzen, wie Funktion,

guard let xml = XML(data: YOUR XML DATA RESPONSE) else { return } 

    self.ReadXML(xml: "\(xml)") 

Oder Sie Ihre URL übergeben können wie,

let url:String="http://synd.cricbuzz.com/j2me/1.0/livematches.xml" 

    let urlToSend: URL = URL(string: url)! 

    guard let xml = XML(contentsOf: urlToSend) else { return } 

Ich hoffe, dies wird Ihnen hilfreich sein. Ich beschäftige mich derzeit so.

+0

danke für deine lösung. Aber zur Zeit konnte ich die Ruhe nicht selbst von meiner API bekommen. Das ist das Problem jetzt ... das ist, warum ich meinen Code, den ich verwende für die Analyse der XML –

+0

Posted So wissen Sie nicht, wie man api aufrufen? –

+0

Wenn Ihre URL GET-Methode ist und Sie direkt XML erhalten, dann können Sie diese URL direkt in meiner gegebenen Lösung übergeben. Überprüfen Sie bitte das. –