用Ji框架进行HTML/XML解析的过程

有如下的HTML/XML文件:

十年的通榆网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整通榆建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“通榆网站设计”,“通榆网站推广”以来,每个客户项目都认真落实执行。

   

       

           

                

               

                   

                       

                           

                               

                                   

                                        

                                        V2EX  我收藏的主题

   

       

           

                

               

                    

                   

                       

                           

                               

   

       

           

   

   

   

    

       

V2EX

首页   duwei1   设置   登出

石墨文档

广告

V2EX    我收藏的主题
主题总数  5

vultr 一到晚上丢包就太严重了

云计算    lishunli    4 分钟前    最后回复来自 watara

25

DigitalOcean

关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   鸣谢   ·   1078 人在线   最高记录 2466   ·  

创意工作者们的社区

World is powered by solitude

VERSION: 3.9.7.5 · 35ms · UTC 02:45 · PVG 10:45 · LAX 19:45 · JFK 22:45
Do have faith in what you're doing.

沪ICP备16043287号-1

显示的web图片在上传文件中。

解析的过程如下:

   /**

    获取我的收藏帖子列表

     */

    class func getFavoriteList(_ page:Int = 1, completionHandler: @escaping (V2ValueResponse<([TopicListModel],Int)>) -> Void){

       //先获取请求地址,如: https://www.v2ex.com/my/topics?p=1

        

        Alamofire.request(V2EXURL+"my/topics?p=\(page)", headers: MOBILE_CLIENT_HEADERS).responseJiHtml { (response) -> Void in

            var resultArray:[TopicListModel] = []

            var maxPage = 1

            if let jiHtml = response.result.value {

               // 先找到 class="cell item" 的这个节点

                

                if let aRootNode = jiHtml.xPath("//*[@class='cell item']"){

                    for aNode in aRootNode {

                        let topic = TopicListModel(favoritesRootNode:aNode)

                        resultArray.append(topic);

                    }

                }

                //更新通知数量

                V2User.sharedInstance.getNotificationsCount(jiHtml.rootNode!)

               //获取最大页码 只有第一页需要获取maxPage

                if page <= 1

                    ,let aRootNode = jiHtml.xPath("//*[@class='page_normal']")?.last

                    , let page = aRootNode.content

                    , let pageInt = Int(page)

                {

                    maxPage = pageInt

                }

            }

            let t = V2ValueResponse<([TopicListModel],Int)>(value:(resultArray,maxPage), success: response.result.isSuccess)

            completionHandler(t);

        }

    }

 //////////////////////////////

    if let aRootNode = jiHtml.xPath("//*[@class='cell item']"){

                    for aNode in aRootNode {

                        let topic = TopicListModel(favoritesRootNode:aNode)

                        resultArray.append(topic);

                    }

                }

这部分是主要的,找到节点。

init(favoritesRootNode:JiNode) {

        super.init()

       self.avata = favoritesRootNode.xPath("./table/tr/td[1]/a[1]/img[@class='avatar']").first?["src"]

        self.nodeName = favoritesRootNode.xPath("./table/tr/td[3]/span[2]/a[1]").first?.content

       self.userName = favoritesRootNode.xPath("./table/tr/td[3]/span[2]/strong[1]/a").first?.content

        let node = favoritesRootNode.xPath("./table/tr/td[3]/span/a[1]").first

        self.topicTitle = node?.content

       self.setupTitleLayout()

        var topicIdUrl = node?["href"];

        if var id = topicIdUrl {

            if let range = id.range(of: "/t/") {

                id.replaceSubrange(range, with: "");

            }

            if let range = id.range(of: "#") {

                id = id.substring(to: range.lowerBound)

                topicIdUrl = id

            }

        }

        self.topicId = topicIdUrl

        let date = favoritesRootNode.xPath("./table/tr/td[3]/span[2]").first?.content

        if let date = date {

            let array = date.components(separatedBy: "")

            if array.count == 4 {

                self.date = array[3].trimmingCharacters(in: NSCharacterSet.whitespaces)

                

            }

        }

       self.lastReplyUserName = favoritesRootNode.xPath("./table/tr/td[3]/span[2]/strong[2]/a[1]").first?.content

        self.replies = favoritesRootNode.xPath("./table/tr/td[4]/a[1]").first?.content

    }

这个方法里面代码的作用是解析得到cell中模型的数据。比如cell中的一个模型数据为userName,有一个值为lishunli,根据favoritesRootNode.xPath("./table/tr/td[3]/span[2]/strong[1]/a").first?.content后进行赋值。

解析后赋值给模型的图片在上传文件中。

附件:http://down.51cto.com/data/2366623

网站栏目:用Ji框架进行HTML/XML解析的过程
网页网址:http://myzitong.com/article/jgjjpd.html

其他资讯