如何在 Python 中使用 lxml 更改 XML 命名空间?
How to change XML namespace with lxml in Python?
我有一个如下所示的 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
属性 更改它。任何帮助,谢谢。
我认为您可以找到 table
元素并通过 .attrib
字典重新设置访问 xmlns
属性的属性值:
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>
我实际上建议使用 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)
应该return:
<html><body><table xmlns="http://www.w3.org/TR/html5/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
</body></html>
我们仍在使用 lxml
但在 BeautifulSoup
中
我有一个如下所示的 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
属性 更改它。任何帮助,谢谢。
我认为您可以找到 table
元素并通过 .attrib
字典重新设置访问 xmlns
属性的属性值:
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>
我实际上建议使用 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)
应该return:
<html><body><table xmlns="http://www.w3.org/TR/html5/">
<tr>
<td>Apples</td>
<td>Bananas</td>
</tr>
</table>
</body></html>
我们仍在使用 lxml
但在 BeautifulSoup