2012-08-28 923 views
12

Tôi đang viết một tập lệnh chỉnh sửa tệp XML với BeautifulStoneSoup, nhưng thư viện chuyển đổi tất cả các thẻ thành chữ thường. Có một tùy chọn để bảo tồn vụ án không?Làm thế nào để duy trì các thẻ phân biệt chữ hoa chữ thường trong BeautifulSoup.BeautifulStoneSoup?

import BeautifulSoup  
xml = "<TestTag>a string</TestTag>"  
soup = BeautifulSoup.BeautifulStoneSoup(xml, markupMassage=False)  
print soup.prettify() # or soup.renderContents() 
#prints 
>>> <testtag>a string</testtag> 
#instead of the expected 
>>> <TestTag>a string</TestTag> 

Trả lời

15

Bạn có thể sử dụng Beautiful Soup 4, như sau (yêu cầu thư viện XML lxml):

In [10]: from bs4 import BeautifulSoup 

In [11]: xml = "<TestTag>a string</TestTag>" 

In [12]: soup = BeautifulSoup(xml, "xml") 

In [13]: print soup 
<?xml version="1.0" encoding="utf-8"?> 
<TestTag>a string</TestTag> 

In [14]: 
+1

Cảm ơn, đã nâng cấp và nó hoạt động tuyệt vời. Đối với người đọc trong tương lai: chạy 'pip install BeautifulSoup4' không phải' pip install beautifulsoup --upgrade' – TankorSmash

+1

Đáng nói đến là nó yêu cầu thư viện 'xml', không phải' lxml' là những gì mà beautifulsoup đề xuất nếu bạn chạy nó không có đặc điểm kỹ thuật. 'lxml' không duy trì trường hợp. –

+0

@KeithSmiley: Có, khi sử dụng 'soup = BeautifulSoup (xml," lxml ")', trình phân tích cú pháp HTML của lxml được sử dụng. Xem http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser. – mzjn