如何使用BeautifulSoup4删除XML声明?

问题描述 投票:2回答:2

我有一个XHTML文件,结构是这样的。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
...
</body>
<html>

我使用了BeautifulSoup 我想从文档中删除XML声明 所以我的文件是这样的。

<!DOCTYPE html>
<html lang="en">
<head>
...
</head>
<body>
...
</body>
<html>

我找不到一种方法来获取XML声明来删除它。据我所知,它似乎不是Doctype、Declaration、Tag或NavigableString。有什么方法可以让我找到这个来提取它吗?

作为一个工作示例,我可以用这样的代码来删除Doctype(假设文档文本是变量 "html")。

soup = BeautifulSoup(html)
[item.extract() for item in soup.contents if isinstance(item, Doctype)]
python xhtml beautifulsoup bs4 xml-declaration
2个回答
3
投票

你可以使用下面的方法。

import bs4

soup = bs4.BeautifulSoup(html, 'html.parser')

for e in soup:
    if isinstance(e, bs4.element.ProcessingInstruction):
        e.extract()
        break

print(soup)

对于你的示例,这将给你更新的HTML为:

<!DOCTYPE html>

<html lang="en">
<head>
...
</head>
<body>
...
</body>
<html></html></html>

0
投票

以下是我在一些非常简单的情况下所做的工作:

from bs4 import BeautifulSoup
s = "<a value='label'/>"
s = BeautifulSoup(s, 'xml')
print(s)
## <?xml version="1.0" encoding="utf-8"?>
## <a value="label"/>
  1. 用bs语法:

    s.decode_contents()
    ## '<a value="label"/>'
    
  2. 用string.split:

    str(s).split("\n")[-1]
    ## '<a value="label"/>'
    
© www.soinside.com 2019 - 2024. All rights reserved.