не в состоянии разобрать с помощью быстрого супа - PullRequest
0 голосов
/ 07 июня 2018

Я работаю над мобильным блогом. Мне нужно проанализировать html-данные, поступающие с сервера, и показать данные отдельно в правильной последовательности. Я получаю этот ответ.

<p>Travel to the 7 wonders of the world is an impressive undertaking! Some people have waited their whole lives to cross these destinations off their dream list. So that you can start your planning your packing list accordingly, here&rsquo;s a list of the 7 wonders of the world and their locations:</p>\n\n<ol>\n\t<li><a href=\"http://www.ancient.eu/Chichen_Itza/\">Chichen Itza, Mexico</a></li>\n\t<li><a href=\"http://www.history.com/topics/great-wall-of-china\">Great Wall of China</a></li>\n\t<li><a href=\"http://www.machupicchu.org/\">Machu Picchu, Peru</a></li>\n\t<li><a href=\"https://www.britannica.com/topic/Christ-the-Redeemer\">Christ the Redeemer Statue, Rio de Janeiro</a></li>\n\t<li><a href=\"http://www.history.com/topics/ancient-history/colosseum\">Colosseum, Italy</a></li>\n\t<li><a href=\"http://whc.unesco.org/en/list/252\">Taj Mahal, India</a></li>\n\t<li><a href=\"http://www.nationalgeographic.com/archaeology-and-history/archaeology/lost-city-petra/\">Petra, Jordan</a></li>\n</ol>\n\n<h1>Chichen Itza</h1>\n\n<p class=\"image-align-center\"><img alt=\"\" height=\"498\" src=\"https://www.ancient.eu/img/r/p/750/3048.jpg?v=1485680877\" width=\"750\"></p>\n\n<p><a href=\"https://www.ancient.eu/Chichen_Itza/\">Chichen Itza</a>, located at the northern tip of the Yucat&aacute;n Peninsula of modern Mexico, was a <a href=\"https://www.ancient.eu/Maya/\">Maya</a><a href=\"https://www.ancient.eu/city/\">city</a> which was later significantly influenced by the <a href=\"https://www.ancient.eu/Toltec_Civilization/\">Toltec civilization</a>. Flourishing between c. 750 and 1200 CE, the site is rich in monumental architecture and sculpture which promote themes of militarism and displays imagery of jaguars, eagles, and feathered-serpents. Probably a capital city ruling over a confederacy of neighbouring states, Chichen Itza was one of the great Mesoamerican <a href=\"https://www.ancient.eu/cities/\">cities</a> and remains today one of the most popular tourist sites in Mexico.</p>\n\n<p>GREAT WALL OF CHINA</p>\n\n<p>The Great Wall of China is an ancient series of walls and fortifications, totaling more than 13,000 miles in length, located in northern China. Perhaps the most recognizable symbol of China and its long and vivid history, the Great Wall was originally conceived by Emperor Qin Shi Huang in the third century B.C. as a means of preventing incursions from barbarian nomads. The best-known and best-preserved section of the Great Wall was built in the 14th through 17th centuries A.D., during the Ming dynasty. Though the Great Wall never effectively prevented invaders from entering China, it came to function as a powerful symbol of Chinese civilization&rsquo;s enduring strength.</p>\n\n<p class=\"image-align-center\"><img alt=\"\" height=\"192\" src=\"https://cdn.history.com/sites/2/2016/02/GettyImages-484536724-A.jpeg\" width=\"334\"></p>\n\n<p> </p>\n

На самом деле я должен показать это последовательно, используя встроенные функции.Я использовал swiftSoup библиотеку, и я также получаю результат, но текст, содержащий ссылки, теги li, тег разделительной строки не приходят.Я делюсь своим кодом здесь.

func parseHtml(){
        print("arrBlogDesc--\(arrBlogDesc)")
        
        if(self.arrBlogDesc.count > 0){
            
            var yVar : CGFloat = CGFloat()
            yVar = 100.00 // 20.0
            var heightVar : CGFloat = 0.0//CGFloat.greatestFiniteMagnitude
            
            for i in 0..<self.arrBlogDesc.count{
                let html = self.arrBlogDesc[i]
                print("str is--\(html)")
                
                // For Text
                do {
                    let doc: Document = try SwiftSoup.parse(html)
                    
                    let links: Elements = try doc.select("a[href]")
                    print("links\(links)")
                    
                    let srcsLinks: Elements = try doc.select("a[href]")
                    let srcsStringArrayLinks: [String?] = srcsLinks.array().map { try? $0.attr("href").description }
                    print("srcsStringArrayLinks--\(srcsStringArrayLinks)")
                    
                    let text: String = try! doc.body()!.text()
                    print("text is--\(text)")
                    
                    let srcs: Elements = try doc.select("img[src]")
                    let srcsStringArray: [String?] = srcs.array().map { try? $0.attr("src").description }
                    print("srcsStringArray--\(srcsStringArray)")
                    
                    let srcsAudio: Elements = try doc.select("audio[src]")
                    let srcsStringArrayAudio: [String?] = srcsAudio.array().map { try? $0.attr("src").description }
                    print("srcsStringArrayAudio--\(srcsStringArrayAudio)")
                    
                    let srcsVideo: Elements = try doc.select("video[src]")
                    let srcsStringArrayVideo: [String?] = srcsVideo.array().map { try? $0.attr("src").description }
                    print("srcsStringArrayVideo--\(srcsStringArrayVideo)")
                    
                    // FOr text
                    if(text != ""){
                        heightVar = 20.0
                        let textView : UITextView = UITextView()
                        textView.frame = CGRect.init(x: 8, y: yVar, width: (self.viewCustom.bounds.size.width - 16), height: heightVar)
                        textView.font = UIFont.systemFont(ofSize: 16)
                        textView.isUserInteractionEnabled = false
                        textView.text = text
                        textView.sizeToFit()
                        self.viewCustom.addSubview(textView)
                        let h = textView.bounds.size.height
                        yVar = yVar + h + 8.0 //20.0
                        print("yVar is--\(yVar)")
                        print("h is--\(h)")
                        
                    }
                    
                    // FOr Image
                    if(srcsStringArray.count > 0){
                        heightVar = 200.0
                        let strURL: String = srcsStringArray[0]!
                        print(strURL)
                        
                        let imgView : UIImageView = UIImageView()
                        imgView.frame = CGRect.init(x: 8, y: yVar, width: (self.viewCustom.bounds.size.width - 16), height: heightVar)
                        imgView.contentMode = .scaleToFill
                        imgView.kf.setImage(with: URL(string: strURL)!, placeholder: UIImage(named: ""))
                        //imgView.setImage(url: URL(string: strURL)!)
                        imgView.layer.borderWidth = 1.0
                        imgView.layer.borderColor = UIColor.lightGray.cgColor
                        self.viewCustom.addSubview(imgView)
                        yVar = yVar + heightVar +  8.0 //20.0
                        print("yVar is--\(yVar)")
                    }
                    
                    // For Audio
                    if(srcsStringArrayAudio.count > 0){
                        
                        heightVar = 50.0
                        
                        let strURL: String = srcsStringArrayAudio[0]!
                        print(strURL)
                        
                        
                        let viewAudio : UIView = UIView()
                        viewAudio.frame = CGRect.init(x: 8, y: yVar, width: (self.viewCustom.bounds.size.width - 16), height: heightVar)
                        viewAudio.layer.borderWidth = 1.0
                        viewAudio.layer.borderColor = UIColor.lightGray.cgColor
                        self.viewCustom.addSubview(viewAudio)
                        
                        // Setting Progress Bar
                        
                        let btn : UIButton = UIButton()
                        btn.frame = CGRect.init(x: 8, y: viewAudio.bounds.size.height/2 - 20/2, width: 20, height: 20)
                        //btn.backgroundColor = UIColor.red
                        viewAudio.addSubview(btn)
                        btn.setImage(UIImage(named:"Play icon"), for: .normal)
                        //btn.addTarget(self, action: #selector(self.btnPlayPause(sender)), for: .touchUpInside)
                        
                        let progressView : UIProgressView = UIProgressView()
                        progressView.frame = CGRect.init(x: 16, y: 0, width: viewAudio.bounds.size.width - 36 , height: 100)
                        progressView.backgroundColor = UIColor.blue
                        progressView.progressTintColor = UIColor.blue
                        progressView.trackTintColor = UIColor.lightGray
                        progressView.backgroundColor = UIColor.green
                        viewAudio.addSubview(progressView)
                        
                        let path: String = strURL
                        let mp3URL = URL(string: path)
//                        let player : VideoPlayerViewController = VideoPlayerViewController()
//                        player.url = mp3URL!
//                        self.present(player, animated: true, completion: nil)
                        do
                        {
                            // 2
                            audioPlayer = try AVAudioPlayer(contentsOf: mp3URL!)
                            // 3
                            Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(updateAudioProgressView(progressView:)), userInfo: nil, repeats: true)

                           progressView.setProgress(Float(audioPlayer.currentTime/audioPlayer.duration), animated: false)
                        }
                        catch
                        {
                            print("An error occurred while trying to extract audio file")
                        }

                        yVar = yVar + heightVar +  20.0
                        print("yVar is--\(yVar)")
                    }
                    
                    // For Video
                    if(srcsStringArrayVideo.count > 0){
                        
                        heightVar = 200.0
                        let strURL: String = srcsStringArrayVideo[0]!
                        print(strURL)
//                        let player : VideoPlayerViewController = VideoPlayerViewController()
//                        player.url = URL(string: strURL)!
//                        self.present(player, animated: true, completion: nil)
                        
                        let viewVideo : UIView = UIView()
                        viewVideo.frame = CGRect.init(x: 8, y: yVar, width: (self.viewCustom.bounds.size.width - 16), height: heightVar)
                        
                        //** set AVPlayer frame n Layer inside viewVideo
                        
                        
                        self.viewCustom.addSubview(viewVideo)
                        yVar = yVar + heightVar +  8.0 //20.0
                        print("yVar is--\(yVar)")
                    }
                    
                    print("yVar is--\(yVar)")
                    
                } catch Exception.Error(_, let message) {
                    print(message)
                } catch {
                    print("error")
                }
            }
            
            self.heightConstraint.constant = yVar
            
        }
    }
...