2017-05-11 6 views
-1

J'ai essayé d'analyser les données xml que j'ai. Mais je ne sais pas ce que je fais pas capable d'imprimer les données à l'écran ainsi que dans la console.ios swift 3 xml analyse et affichage des données

pour mon api:

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

ici ma structure réelle 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> 

Et mon code que j'ai essayé:

 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) { 

    } 


} 

Maintenant l'écran que je dois montrer est comme ceci:

**QUESTION LABEL 

    ANSWER 1 
    ANSWER 2 
    ANSWER 3 
    ANSWER 4** 

i besoin donc d'afficher chaque question d'identité et la réponse de cette question particulière ..

J'ai essayé beaucoup de recherche dans google pas en mesure de trouver la solution après. Toute aide serait utile.

Merci d'avance!

+0

Il est préférable de convertir xml en json via une bibliothèque tierce. https://github.com/amarcadet/XMLReader puis de traiter avec json. –

+0

@hament miglani comment puis-je le convertir à partir de mon code ou que shoyld être une partie différente ?? comme j'ai besoin de mon URL xml pour convertir ou devrais-je besoin d'analyser, puis devrais-je besoin de faire convertir en JSON .. si possible pouvez-vous me montrer un exemple de code ?? –

+0

Comment obtenir ce XML dans une réponse API? –

Répondre

0

Vous pouvez convertir votre format XML réponse à JSON comme étapes ci-dessous:

ajoutez d'abord ce XMLReader fichiers dans votre projet. Vous pouvez le télécharger ici: github.com/amarcadet/XMLReader

Maintenant, vous devez obtenir les données XML de votre API

Maintenant, créez une fonction pour lire xml dans formate JSON comme,

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 
    { 
    } 

} 

vous pouvez utiliser fonction comme,

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

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

Ou vous pouvez passer votre URL comme,

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 } 

J'espère que cela vous sera utile. Je traite comme ceci actuellement.

+0

merci pour votre solution. Mais actuellement je n'ai pas pu obtenir le repos lui-même de mon api. C'est le problème maintenant ... c'est pourquoi j'ai posté mon code que j'utilise pour analyser le xml –

+0

Donc, vous ne savez pas comment appeler api? –

+0

Si votre URL est la méthode 'GET' et que vous obtenez directement XML, vous pouvez passer directement cette URL dans ma solution. S'il te plaît vérifie le. –