2012-08-28 3 views
12

Sto scrivendo uno script che modifica un file XML con BeautifulStoneSoup, ma la libreria converte tutti i tag in lettere minuscole. C'è un'opzione per conservare il caso?Come mantenere tag con distinzione tra maiuscole e minuscole in 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> 

risposta

15

Si potrebbe usare Beautiful Soup 4, come segue (richiede la libreria 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

Grazie, ha fatto l'aggiornamento e funziona benissimo. Per i futuri lettori: esegui 'pip install BeautifulSoup4' not' pip installa beautifulsoup --upgrade' – TankorSmash

+1

Vale la pena ricordare che richiede la libreria 'xml', non' lxml', che è cosa consiglia beautifulsoup se lo esegui senza specifiche. 'lxml' non mantiene il caso. –

+0

@KeithSmiley: Sì, quando si utilizza 'soup = BeautifulSoup (xml," lxml ")', viene utilizzato il parser HTML di lxml. Vedi http://www.crummy.com/software/BeautifulSoup/bs4/doc/#installing-a-parser. – mzjn