首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用DOM解析器删除重复的HTML属性

使用DOM解析器删除重复的HTML属性
EN

Stack Overflow用户
提问于 2018-03-10 19:55:29
回答 1查看 191关注 0票数 1

我有多个垃圾HTML源,我想通过编程来修复它们。它们是具有相同类型的多个属性附加到元素的HTML文件,这在HTML中显然是不正确的。这样的标签示例:

代码语言:javascript
复制
<img alt=" " alt="Turtle" src="turtle.png" alt alt="Funny Turtle" alt="">

我想对这个标记做的是只保留第一个非空的alt属性(只有空格被认为是空的),如下所示:

代码语言:javascript
复制
<img alt="Turtle" src="turtle.png">

如果只有空属性或只有空格的属性,则该属性可以消失。

我正在考虑使用正则表达式来完成这项任务,但它似乎太容易出错。要避免从标记内部删除看起来像属性的文本,并不是一件容易的事。

更好的解决方案是DOM解析器,但我看到的只是忽略重复的属性,使属性数组关联,例如:

代码语言:javascript
复制
[
    'alt' => ' ',
    'src' => 'turtle.png',
]

如果解析器可以获得所有属性,就像这样:

代码语言:javascript
复制
[
    ['name' => 'alt', 'value' => ' '],
    ['name' => 'alt', 'value' => 'Turtle'],
    ['name' => 'src', 'value' => 'turtle.png'],
    ['name' => 'alt', 'value' => null],
    ['name' => 'alt', 'value' => 'Funny Turtle'],
    ['name' => 'alt', 'value' => ''],
]

这将是相当容易修复它。我只需要找到副本,然后将节点上的attibute设置为第一个值。

是否有任何DOM解析器获取所有属性,包括重复的属性?

EN

回答 1

Stack Overflow用户

发布于 2018-03-12 05:34:04

不知道适合php的解析器,但作为替代解决方案,您可以使用python HTMLParser。

代码语言:javascript
复制
from HTMLParser import HTMLParser

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        if tag=='img':
            print "tag:", tag, "attrs:",attrs

parser = MyHTMLParser()
parser.feed('<html><body><h1><img alt=" " alt="Turtle" src="turtle.png" alt alt="Funny Turtle" alt="">Parse me!</h1></body></html>')

# output:
# tag: img attrs: [('alt', ' '), ('alt', 'Turtle'), ('src', 'turtle.png'), ('alt', None), ('alt', 'Funny Turtle'), ('alt', '')]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49208771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档