2017-05-11 4 views
-1

나는 가지고있는 XML 데이터를 구문 분석하려고 시도했습니다. 하지만 나는 콘솔 에서뿐만 아니라 화면에서 데이터를 인쇄 할 수 없다는 것을 알지 못합니다. 내 API에 대한ios swift 3 xml 파싱 및 데이터 표시

: 여기

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

내 실제 구조 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> 

그리고 난 시도 내 코드 :

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

    } 


} 

을 이제 내가 보여줄 필요가 화면 다음과 같습니다.

**QUESTION LABEL 

    ANSWER 1 
    ANSWER 2 
    ANSWER 3 
    ANSWER 4** 

그래서 나는 그 후 해결책을 찾기 위해 구글에 많은 검색 수없는 시도 각 ID 질문과 해당 질문의 답 ..

를 표시해야합니다. 어떤 도움이 유용 할 것입니다.

미리 감사드립니다.

+0

제 3 자 라이브러리를 통해 xml을 json으로 변환하는 것이 좋습니다. https://github.com/amarcadet/XMLReader 그런 다음 json을 처리하십시오. –

+0

@hament miglani 어떻게 코드에서 변환 할 수 있습니까? 아니면 다른 부분이 될까요? 내가 변환 할 내 XML URL이 필요하거나 구문 분석해야 다음 json으로 변환해야 할 .. 가능한 경우 내가 몇 가지 코드 예제를 보여줄 수 ?? –

+0

일부 XML 응답에이 XML이 표시되는 이유는 무엇입니까? –

답변

0

당신은 단계를 다음과 같이 당신의 XML 응답 JSON에 포맷을 변환 할 수 있습니다

먼저 사용자의 프로젝트에서이 XMLReader 파일을 추가합니다. 당신은 여기에서 다운로드 할 수 있습니다 : github.com/amarcadet/XMLReader

지금 당신은 이제 JSON 메이트 같은에서 XML을 읽을 수있는 하나 개의 함수를 만들려면 API

에서 XML 데이터를 얻을 수 있고,

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

} 

이 사용할 수 있습니다 이 같은 URL을 전달할 수

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

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

또는 기능처럼,

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 } 

희망이 도움이 될 것입니다. 나는 현재 이와 같이 다루고있다.

+0

감사합니다. 하지만 현재 나는 내 api에서 휴식을 얻을 수 없었다. 문제가 지금 thats ... 그 이유는 내가 XML을 구문 분석에 사용하고 내 코드를 게시했습니다 –

+0

그래서 API를 호출하는 방법을 몰라? –

+0

당신의 URL이'GET' 메소드이고 직접 XML을 얻고 있다면 주어진 솔루션에서 그 URL을 직접 전달할 수 있습니다. 그것을 확인하십시오. –