如何使BeautifulSoup XMLFormatter保留实体

2024-09-28 22:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要保留XML文档中属性的顺序。 根据文档,我尝试了以下方法

from bs4 import BeautifulSoup
from bs4.formatter import XMLFormatter

class UnsortedAttributes(XMLFormatter):
    def attributes(self, tag):
        for k, v in tag.attrs.items():
            yield k, v

soup = BeautifulSoup('<p foo="1" bar="2">&amp;</p>', 'xml')
print(soup.encode(formatter=UnsortedAttributes()))

这将输出<p foo="1" bar="2">&</p>,将&amp;转换为&。 如何保留实体


Tags: from文档import属性fooformattertagbar
1条回答
网友
1楼 · 发布于 2024-09-28 22:23:06

我找到了解决办法

from bs4 import BeautifulSoup
from bs4.formatter import XMLFormatter
from bs4.dammit import EntitySubstitution

class UnsortedAttributes(XMLFormatter):
    def __init__(self, *args, **kwargs):
        return super(XMLFormatter, self).__init__(
            entity_substitution=EntitySubstitution.substitute_xml)

    def attributes(self, tag):
        for k, v in tag.attrs.items():
            yield k, v

soup = BeautifulSoup('<p foo="1" bar="2">&amp;</p>', 'xml')
print(soup.encode(formatter=UnsortedAttributes()))

相关问题 更多 >