iOS html标签解析解决方案

微信H5视频自动播放终极指南:从iOS到安卓的完整避坑方案 本文深入解析了在微信H5中实现视频自动播放的完整方案。针对微信内置浏览器的特殊限制和iOS/安卓平台的差异,提供了从基础标签配置、分平台JavaScript策略到用户交互引导的全链路解决方案,重点解决了视频自动播放的兼容性问题,帮助开发者打造流畅的移动端视频体验。 阅读详情
 由于项目是基于 b/s结构,因为在pc端上是没有客户端这概念只有浏览器,而对于web与移动端的关系,实际上还是类似于 C/S结构,因此web端与web端的通信是通过发送HTML5标签来实现,常规的做法中pc端与移动端是通过数据文本、文件来通信来交流信息的而非HTML5标签。

解决方案:
     为了解决通信的矛盾,一般有两个思路:(1)后台根据发送目标来匹配发送数据。(2)适配传输内容。
     思路一基于现有的条件来说实现难度大,而且不大现实。而思路二,也有一定的实现难度,但较思路一要现实,因此选择思路二。
     思路二的具体实现方案有两种,方案一是基于文本发送,前端收到文本信息后再封装成html5标签进行显示,而移动端直接接受显示。方案二是html5标签,web端直接显示,移动端解析显示。
     项目需要,选择方案二。

Hpple 
hpple,它是一个轻量级的包装框架,可以很好的解决这个问题,尤其是它支持HTML的解析,是其他XML类库所不及的地方,它是用XPath来定位和解析HTML或者XML。githut下载地址

XPath定位原理
Xpath将xml的文档结构视为一个树形结构,元素、属性、文本、注释以及处理指令都是这个树形结构上的节点,对于xml文档中元素、属性、文本、注释以及处理指令的访问实际上是按顺序遍历这棵树,使用Xpath的路径表示法,可以定位到XML文档中的一个节点或者节点集合。
在Xpath中,可以使用相关标识来定位元素以及其属性,这些标识符关键字主要有:child、self、parent、descendant、attribute等。
child为默认标识符,self表示当前节点,parent表示上一级节点。
descendant表示当前子孙节点,attribute表示当前节点的属性。
绝对路径的Xpath表示
绝对路径是从根节点到目标节点所经历的路径。



im模块通信常见HTML5标签样式

    //-------------------- 纯文本 ----------------------------------//
   
//NSString *testData = @"<p> 哈哈 </p>";
   
//NSString *testData = @"<p>ha&nbsp;<br/></p>";
   
//NSString *testData = @"<p>ha ni ha hehe wo&nbsp;</p>";
   
//NSString *testData = @"<p> 嘿嘿,你好 </p>";
   
//NSString *testData = @"<p>1 &nbsp; &nbsp; &nbsp;1 &nbsp; &nbsp; &nbsp; &nbsp; 1 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 1 <br/></p>";
   
//NSString *testData = @"<p><strong> 哈哈 </strong><br/></p>";
   
//NSString *testData = @"<p>title<span>111</span><a>222</a>333<br><i>77&nbsp;7<strong>555</strong>444</i>666</p>";
    
    //--------------------- 图文混合 -------------------------------//
   //NSString *testData = @"<p>水电费水电费<img src=\"http://img.baidu.com/hi/jx2/j_0025.gif\">谁的故事电饭锅<img src=\"/dynamic/upload1/image/20150729/1438130709982028464.jpg\" title=\"1438130709982028464.jpg\" alt=\"14.jpg\">山东省</p>";

    //--------------------- 纯文件 ---------------------------------//
   //NSString *testData =   @"<p><a class=\"file\" id=\"WU_FILE_0\" href=\"20_205553.png\" name=\"68477\" target=\"_blank\">2015-07-20_205553.png<span class=\"blockspan progress\" style=\"display: none;\"><span class=\"blockspan progress-bar\" style=\"width: 100%;\">0%</span></span></a></p><p><br></p>";


引入TFHpple第三方库效果 
     集成TFHpple库后,只需要调用以下三行代码,即可完成html5标签的解析。
    NSData *data = [testData dataUsingEncoding : NSUTF8StringEncoding ];
   
TFHpple *xpathParser = [[ TFHpple alloc ] initWithHTMLData :data];
   NSArray *elements  = [xpathParser searchWithXPathQuery:@"//p"];
    在对纯文本标签的测试,基本都通过,无任何错误。知道解析 <p>title<span>111</span><a>222</a>333<br><i>77&nbsp;7<strong>555</strong>444</i>666</p>  
    最后得到@[@“666”,@“111”,@“222”,@“555”,@“444”]的结果。
    与目标结果@[@“title”,@“111”,@“222”,@“333”,@“444”,@“555”,@“666”]的结果相差甚远。
    
     根据程序实现逻辑可以将标签转成哈夫曼树如下图:

从图可以容易得出,因为每个节点只允许存储一个数值,因此,后面的数值会覆盖之前存储好的数值。
因此TFHpple库未能满足项目的要求。


针对 TFHpple库进行优化
     针对上述的情况,为了实现不会有数据的丢失,修改TFHpple库的实现逻辑,将数据结构改成NSArray,将所有的数值按照数组的值存储起来。
      经过修改的TFHpple库解析后的哈夫曼树图如下:

之时, TFHpple解析出来的结果包含了所有的参数,但是顺序确是换乱。因为Xpath对标签是按照顺序来解析的,而换了NSArray后,存储的顺序规律已经被破坏,因此需要从新为每个数据编定绝对位置。
通过给每个写入结果的参数都添加上[i],其中i表示写入的顺序。当获得结果后,再经过一个排序即可获得最终结果。

但是,由于还有属性参数已经因为文件、图片类型的标签的存在,因此需要在 TFHpple的实现中添加一定的限制条件,只允许文本、img-url、file-href三种关键数据的写入。
因此添加的绝对标签在最重的结果是不完整的,所以要将原本的绝对标签视为相对标签,再将其再转换成绝对标签,最后根据标签顺序整合文本、图片、文件结果。

结果
     最终实现了文本、图片、文件三种类型的单独或者混合形式的标签的解析。
     优化后的 TFHpple库githut地址
ios webView获取html标签 加载webView实现代理 在代理方法中获取html标签的需求 ,对标签中的url进行操作 立即下载

相关推荐

HTML标签实体解析

用来解析HTML的实体,比如<>等的实体。UIWebView只能解析一层,所以该方法非常有用。如果遇到这样的情况的话会非常麻烦。

span标签在ios中错位 span标签位置下移异常

场景:span标签在ios中出现错位,往下移了一部分. 安卓以及pc模拟均是正常的。 解决方案:加上vertical-align: top;即可

qq_39855581的博客 1318

浅谈iOS解析HTMl标签以及开发中的一些坑

主要介绍了浅谈iOS解析HTMl标签以及开发中的一些坑,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

iOS解析html

首先是要对HTML文本进行去除标签。 + (NSString *)filterHTML:(NSString *)html { if (!html) { return nil; } NSScanner * scanner = [NSScanner scannerWithString:html]; NSString *text = nil; ...

luosu1993的博客 606

从Palantir到AI时代:Forward Deployed Engineer模式的深度解析

《从Palantir到AI时代:FDE模式的创新与挑战》摘要:Palantir开创的前置部署工程师(FDE)模式正在成为AI创业公司的标配。该模式通过现场工程师深入了解客户需求,填补产品与实际应用间的鸿沟,颠覆了传统SaaS规模化路径。核心优势在于将定制化服务转化为产品发现机制,特别适合高度异质化的AI市场。成功关键在于平衡定制与标准化,通过合同价值增长、产品杠杆效应等独特指标衡量成效。FDE人才需要兼具领域洞察力与快速原型能力。这一模式表明,在AI等新兴领域,深入客户现场可能比单纯追求技术突破更能创造商业

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 4544

001-基础入门-Web演示源码&资源&工具箱等

小迪安全2023笔记

wushangyu32335的博客 4265

iOS 展示html文本两种方式

目录 一、webview展示,链接跳转到系统safari 1、字体大小设置有两种方法: 1.1、直接拼接在html字符串里面,可以设置字体值: 1.2、WKNavigationDelegate代理里面进行缩放: 2、跳转自定义,因为文本并没有占据整个页面,设计也未增加网页返回等内容,所以跳转到浏览器相对好一点,我这里跳转到safari控制器,在WKNavigationDelegate...

wokuaab_q的博客 9881

SAP固定资产原值与净值取值逻辑全解析:从数据表到ABAP实战

在企业资源计划(ERP)系统中,固定资产的价值管理是财务会计的核心模块,其关键在于准确核算资产原值与净值。从技术原理上看,这涉及对资产全生命周期业务(如购置、折旧、转移、报废)的财务建模,以及底层数据表(如ANLC、ANEP)的精准关联与计算。掌握这一逻辑的技术价值在于,能够确保财务报表数据的准确性,满足合规性要求,并为管理决策提供可靠依据。在SAP ECC或S/4HANA系统的应用场景中,ABAP开发者与财务顾问常需通过编写报表程序,从复杂的数据结构中提取资产价值信息。本文聚焦于SAP资产会计模块,深入剖

weixin_30984001的博客 395

iOS解析HTML标签

正文 前两天获取后台数据的时候,得到这么一条返回信息 "恭喜您获得font color='red'>8.1元font>现金奖励 " 本来简简单单的把返回数据展示到label上的事情一下子变得有趣起来,后台说是为了以后产品改返回内容的时候容易处理,可以这理由很强势。 很强势 但是作为开发的我们怎么处理呢,首先我们看下安卓的处理方法,安卓对处理这个还是比较粗暴的人家有系统方法

-此夜微凉 4554

Vlan的封装模式和端口讲解(Access、Trunk、Hypbrid端口)

Vlan(Virtual Local Area Network)虚拟局域网,将一个物理的LAN在逻辑上划分为多个广播域,在交换机上实现广播域隔离(增强局域网的安全性、限制广播风暴、简化网络管理)Vlan通过将二层数据帧打上Vlan标签(打上Vlan标签也就是封装Vlan),正常情况下,不同Vlan Tag的数据包是无法二层直接互访的,以此来实现广播域的隔离可以理解为一个Vlan对应一个广播域,同一Vlan内的主机可以二层直接通信,不同Vlan间的主机无法二层直接通信。

m0_49864110的博客 5645

JLINK/SWD/STLINK下载选项区别

摘要: 本文对比了JLINK/SWD/STLINK的6种下载模式:Normal(硬件复位)、Hot plug(无复位)、Under reset(持续复位后连接)、Software reset(软件复位)、Hardware reset(全复位)和Core reset(内核复位)。重点分析了各模式的操作逻辑、适用场景及注意事项,其中Under reset模式是解决SWD禁用/程序异常的首选方案。通过对比表归纳了复位范围、NRST操作等核心差异,并给出场景选择建议:排查连接问题优先选Under reset,常规调

亚洲程序员盟主得博客 397

iOS 解析 html

在iOS开发中,app数据的来源,有可能是通过解析html。我一般是通过使用hpple三方库,来解析自己想要的数据。以下以解析新浪股票的某个模块为例,简单展示一下hpple的使用。 1. hpple的安装  查询了一下hpple的版本信息,然后通过pod 将其集成到工程中。 2. 要解析的内容 解析的网址链接为 https://finance.sina.com.cn/stock/ ,下...

littlelittlepeng的博客 3354

408 | 408常用计算公式与方法 —— 计组篇 汇总

408常用计算公式与方法 —— 计算机组成原理篇 汇总

"You are worthy! You can do it!" 4657

ios转换html标签,iOS html标签解析解决方案

由于项目是基于b/s结构,因为在pc端上是没有客户端这概念只有浏览器,而对于web与移动端的关系,实际上还是类似于C/S结构,因此web端与web端的通信是通过发送HTML5标签来实现,常规的做法中pc端与移动端是通过数据文本、文件来通信来交流信息的而非HTML5标签。解决方案:为了解决通信的矛盾,一般有两个思路:(1)后台根据发送目标来匹配发送数据。(2)适配传输内容。思路一基于现有的条件来说实...

weixin_36310662的博客 541

【CASS精品教程】032:CASS11台阶画法案例大全

一、普通无边台阶 二、普通有边台阶 三、普通圆弧无边台阶 四、U型台阶 五、曲线U型台阶 六、L型台阶

智慧空间实验室 7467

2、探秘储备池计算:原理、应用与前沿趋势

储备池计算(Reservoir Computing)作为一种新兴的计算方法,起源于计算神经科学和机器学习领域,现已广泛应用于非线性动力系统理论、物理学、材料科学、生物学和机器人学等多个领域。其核心优势在于概念简洁性,通过利用高维动态系统的非线性响应,将学习过程集中在读出层,避免了传统循环神经网络(RNN)训练的复杂性。储备池计算的发展方向主要包括拓展到非线性动态系统和利用物理动态系统作为计算资源(PRC),后者有望突破冯·诺依曼瓶颈,实现边缘计算。理论方面,储备池计算与人类大脑的信息处理方式密切相关,并推动

ggg99的专栏 738

ios html 解析 布局,iOS html标签解析解决方案

由于项目是基于b/s结构,因为在pc端上是没有客户端这概念只有浏览器,而对于web与移动端的关系,实际上还是类似于C/S结构,因此web端与web端的通信是通过发送HTML5标签来实现,常规的做法中pc端与移动端是通过数据文本、文件来通信来交流信息的而非HTML5标签。解决方案:为了解决通信的矛盾,一般有两个思路:(1)后台根据发送目标来匹配发送数据。(2)适配传输内容。思路一基于现有的条件来说实...

weixin_39949413的博客 726

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

解析HTML标签

最近做的需求需要使用富文本,因此探究了一番,我们怎么样解析服务器的html标签的相信很多人都说使用NSMutableAttributedString就可以解析,下面代码解析html标签并且显示在label上。 UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 100, 300, 200)]; NSAttributedString *attributedString = [[NSAttributedString alloc] i

onebutterfly 1125

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ios html有虚边,iOS HTML解析库Ono的一个缺陷

以前写的,不知道怎么就不见了,重发Ono是iOS & OS X平台一个优秀的XML、HTML解析库,内部其实是对libxml2的封装。最近在使用的时候遇到了一个bug缺陷。业务代码如下:ONOXMLDocument *document = [ONOXMLDocument HTMLDocumentWithString:htmlString encoding:NSUTF8StringEncod...

weixin_33204101的博客 292

textarea ios设备回显无显示问题

textarea ios设备回显无显示问题回显的内容有html标签 所以我用的vue v-html解析html代码 回显的内容有html标签 所以我用的vue v-html解析html代码 此时安卓手机可以正常回显,ios设备回显不了 #解决方法: 步骤一、v-html 换成 :value 步骤二、提前将HTML标签替换掉 ...

WalkOn_The_Road_的博客 1742

IOS图标 HTML规范,iOS 轻量级 HTML 解析方案

一个轻量级的 Objective-C-HMTL-Parser 解析库,这里主要是希望 HTML 解析出想要的标签字段。题外:如果是要将 HTML 解析成富文本展示,推荐 DTCoreText。添加到 framework 或 app 在 Build Setting 的 Header Search Paths 添加 $(SDKROOT)/usr/include/libxml2。如果是添加到 podsp...

weixin_30320081的博客 138

h5 video标签

h5 video标签: Video 对象属性 属性 描述 audioTracks 返回表示可用音频轨道的 AudioTrackList 对象。 autoplay   * 设置或返回是否在就绪(加载完成)后随即播放视频。 buffered 返回表示视频已缓冲部分的 TimeRanges 对象。 controller    返回表示视频当前媒体控制...

CamilleZJ的博客 2073

ibooks打开iframe引用的html文件乱码

环境:ipad2,ios9.0.2,ibooks4.4(3402) 制作的epub含有某一页有iframe标签,引用的html文件是用utf-8带bom的(二级制EF BB BF开头),但是是用vs2010保存为unicode(utf-8 without signature)保存后,连都无法解析,但是我讲该文件重命名,同时更改iframe的src,发现可以解析正常了, 怀疑ibooks对同名文

dragoo1的专栏 1261

ios 标签解析html_iOS解析html

在一些情况下我们在工程中需要解析html中的数据,TFHpple是一个非常方便的三方类.它可以根据标签解析html数据,应用比较简便. 首先要先做一下准备工作。下载[TFHpple:](topfunky/hpple),将文件夹拖入到工程中.TFHpple的工作原理是事先根据URL将html数据转化为NSData类型.然后再根据标签解析数据.```- (void)viewDidLoad{ ...

weixin_29335033的博客 662
上一篇: block应用与保留环
下一篇: iOS线程死锁分析
luozhiwei_iOS
博客等级 码龄12年 4粉丝 32原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值