我正在研究用于解析用XML编写的配置文件的代码,其中XML标签是大小写混合的,并且案例很重要。 Beautiful Soup似乎默认将XML标记转换为小写,我想改变这种行为。
我不是第一个就这个问题提出问题的人[见here]。但是,我不理解该问题的答案,并且在BeautifulSoup-3.1.0.1中,BeautifulSoup.py似乎不包含“encodedName
”或“Tag.__str__
”的任何实例
答案 0 :(得分:6)
import html5lib
from html5lib import treebuilders
f = open("mydocument.html")
parser = html5lib.XMLParser(tree=treebuilders.getTreeBuilder("beautifulsoup"))
document = parser.parse(f)
'document'现在是一个类似BeautifulSoup的树,但保留了标签的情况。有关文档和安装,请参阅html5lib。
答案 1 :(得分:3)
根据美丽汤的创作者Leonard Richardson的说法,can't。
答案 2 :(得分:1)
使用lxml要好得多。它比BeautifulSoup快得多。如果您不想学习lxml API,它还有BeautifulSoup的兼容性API。
没有理由再使用BeautifulSoup了,除非您使用的是Google App Engine或其他不允许使用Python的东西。
它也更适合XML。
答案 3 :(得分:1)
首先我们应该知道:html解析器不区分大小写,因此请将标记转换为小写
并且:Beautifulsoup
内部调用一些parser
来解析输入html
/ xml
。
->对于最新的bs4
= BeautifulSoup v4
,默认使用html.parer
。
soup = BeautifulSoup(yourXmlStr, 'html.parser')
但是 ALL html parser
不区分大小写,因此html.parer
(和另外两个,在official doc中说:
lxml
BeautifulSoup(yourHtmlOrXmlStr, "lxml")
html5lib
BeautifulSoup(yourHtmlOrXmlStr, "html5lib")
),会将 TAG 转换为小写的标记
<?xml version="1.0" encoding="UTF-8"?>
<XCUIElementTypeApplication type="XCUIElementTypeApplication" name="微信"
label="微信" enabled="true" visible="true" x="0" y="0" width="375" height="667">
<XCUIElementTypeWindow
type="XCUIElementTypeWindow" enabled="true" visible="true" x="0" y="0" width="375" height="667">
</XCUIElementTypeWindow>
</XCUIElementTypeApplication>
<?xml version="1.0" encoding="UTF-8"?>
<xcuielementtypeapplication enabled="true" height="667" label="微信" name="微信" type="XCUIElementTypeApplication" visible="true" width="375" x="0" y="0">
<xcuielementtypewindow enabled="true" height="667" type="XCUIElementTypeWindow" visible="true" width="375" x="0" y="0">
</xcuielementtypewindow>
</xcuielementtypeapplication>
disable
BeautifulSoup标记自动小写转换?soup = BeautifulSoup(yourXmlStr, 'xml')
与:
soup = BeautifulSoup(yourXmlStr, 'lxml-xml')
<?xml version="1.0" encoding="utf-8"?>
<XCUIElementTypeApplication enabled="true" height="667" label="微信" name="微信" type="XCUIElementTypeApplication" visible="true" width="375" x="0" y="0">
<XCUIElementTypeWindow enabled="true" height="667" type="XCUIElementTypeWindow" visible="true" width="375" x="0" y="0">
</XCUIElementTypeWindow>
</XCUIElementTypeApplication>
请参阅我的(中文)帖子:【已解决】Python的BeautifulSoup中XML标签tag为何会自动被转换成小写以及是否可以禁止
答案 4 :(得分:0)
只需使用propper xml解析器而不是用于处理损坏文件的lib
我只是看看xml.etree或lxml