Python 我能换个漂亮的吗;有关将XML标记转换为小写的行为?
我正在编写代码来解析用XML编写的配置文件,其中XML标记是大小写混合的,大小写很重要。默认情况下,Beautiful Soup会将XML标记转换为小写,我想更改此行为Python 我能换个漂亮的吗;有关将XML标记转换为小写的行为?,python,xml,beautifulsoup,Python,Xml,Beautifulsoup,我正在编写代码来解析用XML编写的配置文件,其中XML标记是大小写混合的,大小写很重要。默认情况下,Beautiful Soup会将XML标记转换为小写,我想更改此行为 我不是第一个就这个问题提问的人[见]。但是,我不理解这个问题的答案,在BeautifulSoup-3.1.0.1中,BeautifulSoup.py似乎不包含任何“encodedName”或“标记”的实例 我建议只看一下xml.etree或lxml import html5lib from html5lib import tre
我不是第一个就这个问题提问的人[见]。但是,我不理解这个问题的答案,在BeautifulSoup-3.1.0.1中,BeautifulSoup.py似乎不包含任何“
encodedName
”或“标记”的实例
我建议只看一下xml.etree或lxml
import html5lib
from html5lib import treebuilders
f = open("mydocument.html")
parser = html5lib.XMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
document = parser.parse(f)
“document”现在是一个类似于BeautifulSoup的树,但保留了标记的大小写。有关文档和安装,请参阅。据《美丽汤》的创建者、维护者莱纳德·理查森(Leonard Richardson)所说,使用它会更好。它比BeautifulSoup快得多。如果您不想学习lxml API,它也为BeautifulSoup提供了一个兼容API
没有理由再使用BeautifulSoup了,除非你使用的是Google App Engine或者其他不允许使用Python的东西
它也更适合XML。背景和原因
首先我们应该知道:html解析器不区分大小写,所以将标记转换为小写
并且:Beautifulsoup
在内部调用一些解析器
来解析输入html
/xml
->对于最新的bs4
=beautifulsoupv4
,默认使用html.parer
soup=BeautifulSoup(您的xmlstr,'html.parser')
但是ALLhtml解析器
不区分大小写,因此html.parer
(还有另外两个,比如:
lxml
BeautifulSoup(您的htmlorxmlstr,“lxml”)
html5lib
BeautifulSoup(你的HTMLorXMLSTR,“html5lib”)
),将标记转换为小写的标记
例子
- 输入:
- 输出:
如何禁用
BeautifulSoup标记自动小写转换?
- 解决方案:更改为xml解析器
- 原因:xml解析器支持区分大小写的标记
- ->不自动将标记转换为所有小写
- 代码
soup=BeautifulSoup(您的xmlstr,'xml')
同:
soup=BeautifulSoup(yourXmlStr,'lxmlxml')
- 输出示例:
更多细节
请参阅我的(中文)帖子:使用lxml解析xml。它可以使用html5lib解析html。这些解析器应该保留标记的大小写。添加一个提醒:HTML标记中的属性值不会转换为小写,只有HTML标记及其属性名称会转换为小写。例如,在
中,Name
将转换为小写,但Succeed
不会。