我有一个像下面这样的XML文件,我用lxml将它解析为Tree。
我想要做的是将xml声明从xmlns="http://www.w3.org/TR/html4/"
更改为xmlns="http://www.w3.org/TR/html5/"
。
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
但是我没有获得xmlns
属性或通过设置tag
属性来更改它。任何帮助,谢谢。
答案 0 :(得分:0)
我认为您可以找到table
元素,并通过xmlns
字典重新设置访问.attrib
属性的属性值:
In [1]: from lxml import html
In [2]: data = """<html><body><table xmlns="http://www.w3.org/TR/html4/">
...: <tr>
...: <td>Apples</td>
...: <td>Bananas</td>
...: </tr>
...: </table></body></html>"""
In [3]: root = html.fromstring(data)
In [4]: root.find('.//table').attrib['xmlns'] = "http://www.w3.org/TR/html5/"
In [5]: print(html.tostring(root, encoding='unicode', pretty_print=True))
<html><body><table xmlns="http://www.w3.org/TR/html5/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table></body></html>
答案 1 :(得分:0)
我实际上建议使用BeautifulSoup
对html结构进行此类更改:
from bs4 import BeautifulSoup
t = """
<table xmlns="http://www.w3.org/TR/html4/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
"""
soup = BeautifulSoup(t, 'lxml')
soup.table['xmlns'] = 'http://www.w3.org/TR/html5/'
print(soup)
它应该返回:
<html><body><table xmlns="http://www.w3.org/TR/html5/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
</body></html>
我们仍在使用lxml
但在BeautifulSoup