加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP DOMDocument命名空间

发布时间:2020-12-13 17:54:30 所属栏目:PHP教程 来源:网络整理
导读:我正在编写一个带有网页的脚本,并检测使用像facebook这样的按钮的次数.由于这最好用DOM完成,我决定使用 PHP的DOMDocument. 不过,我遇到的一个问题是像facebook这样的按钮: fb:like send="true" width="450" show_faces="true"/fb:like 由于此元素在技术上具
我正在编写一个带有网页的脚本,并检测使用像facebook这样的按钮的次数.由于这最好用DOM完成,我决定使用 PHP的DOMDocument.

不过,我遇到的一个问题是像facebook这样的按钮:

<fb:like send="true" width="450" show_faces="true"></fb:like>

由于此元素在技术上具有“fb”的命名空间,因此DOMDocument会发出警告,指出未定义此命名空间前缀.然后它继续去除前缀,所以当我到达所述元素时,它的标签不再是fb:like,而是像.

有没有办法“预注册”命名空间?有什么建议?

我遇到了同样的问题,我提出了以下解决方案/解决方法:

没有干净的方法使用DOMDocument解析HTML与命名空间而不会丢失命名空间,但有一些解决方法:

>使用另一个接受HMTL代码中的命名空间的解析器.在这里查看HTML解析器的详细列表.这可能是最有效的方法.
>如果你想坚持使用DOMDocument,你基本上必须对代码进行预处理和后处理.

>在将代码发送到DOMDocument-> loadHTML之前,请使用正则表达式,循环或任何您想要查找所有命名空间标记的内容,并将自定义属性添加到包含命名空间的开始标记.

<fb:like send="true" width="450" show_faces="true"></fb:like>

然后会导致

<fb:like xmlNamespace="fb" send="true" width="450" show_faces="true"></fb:like>

>现在将编辑后的代码提供给DOMDocument-> loadHTML.它将删除命名空间,但它会保留导致的属性

<like xmlNamespace="fb" send="true" width="450" show_faces="true"></like>

>现在(再次使用正则表达式,循环或任何您想要的)查找具有属性xmlNamespace的所有标记,并将该属性替换为实际的名称空间.不要忘记将命名空间添加到结束标记!

我不认为OP仍在寻找答案,我只是在发表这篇文章的任何人发表这篇文章.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读