Python 我能换个漂亮的吗;有关将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

我正在编写代码来解析用XML编写的配置文件,其中XML标记是大小写混合的,大小写很重要。默认情况下,Beautiful Soup会将XML标记转换为小写,我想更改此行为


我不是第一个就这个问题提问的人[见]。但是,我不理解这个问题的答案,在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')
但是ALL
html解析器
不区分大小写,因此
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
不会。