我需要删除所有不需要<p>的地方.如转换<div><p>xxxx</p></div>为<div>xxxx</div>.
我怎么能用DOM做到这一点?"如果<div>只有一个<p>内部,那么分配该<p>文本<div>并删除它<p>".
我会用正则表达式来做,但有些人说它很糟糕.我无法想象它是如何完成DOM的.
text = "<div><p>xxxx</p></div>"
???
Run Code Online (Sandbox Code Playgroud)
是否可以用DOM解决?或者好的旧正则表达式对于这种情况更好?
Python,而不是JavaScript.
这对我有用:
from xml.dom import minidom
text = "<div><p>xxxx</p></div>"
doc = minidom.parseString(text)
# For each div in the root document
for tag in doc.childNodes:
# If it's a <p> and there's only one
if len(tag.childNodes) == 1 and tag.childNodes[0].tagName == 'p':
# p_node = <p>xxx</p>
p_node = tag.childNodes[0]
# p_text_node = xxx
p_text_node = p_node.childNodes[0]
value = p_node.nodeValue
# Delete the <p>xxx</p>
p_node.parentNode.removeChild(p_node)
# Set the <div></div> -> <div>xxx</div>
tag.appendChild(p_text_node)
print doc.toxml()
Run Code Online (Sandbox Code Playgroud)
和产量:
<?xml version="1.0" ?><div>xxxx</div>
Run Code Online (Sandbox Code Playgroud)
我希望你能接受我给你的另一个问题的答案,因为我为你做了所有的工作;)
这是使用BeautifulSoup的方法:
>>> import BeautifulSoup
>>> somehtml = '<html><title>hey</title><body><p>blah</p><div><p>something</p></div></body></html>'
>>> soup = BeautifulSoup.BeautifulSoup(somehtml)
>>> for p in soup.findAll('p'):
... if p.parent.string is None and len(p.parent.contents) == 1:
... p.parent.string = p.string
... p.extract()
>>> soup
<html><title>hey</title><body><p>blah</p><div>something</div></body></html>
Run Code Online (Sandbox Code Playgroud)
这将搜索<p>父级没有内容且只有一个子级(<p>元素)的所有元素,然后将<p>元素的内容复制到父级并删除该<p>元素.
| 归档时间: |
|
| 查看次数: |
5062 次 |
| 最近记录: |