2011-11-14 21 views
7

Python kullanarak bir xml dosyası okuyorum.Python, '&' karakterlerin varlığı nedeniyle 'İyi biçimlendirilmemiş xml' hatası veriyor

xml.parsers.expat.ExpatError: not well-formed (invalid token): 

piton tarafından & çek görmezden bir yolu var mı: Ama xml dosyası nedeniyle benim Python kodunu çalıştırırken hangi, aşağıdaki hata veriyor, & karakter içeriyor?

+1

olası yinelenen http://stackoverflow.com/questions/1328538/how-do-i-escape-ampersands -in-xml) –

+0

@James: gerçekten değil, çünkü soru neredeyse XML değil, neredeyse XML oluşturmak, ilk etapta XML nasıl düzgün bir şekilde oluşturulacak. – geoffspear

+3

Orijinal "XML" dosyasını yaratan her hangi bir şey üzerinde kontrolünüz var mı? – geoffspear

cevap

6

Hayır, çekmeyi göz ardı edemezsiniz. 'Xml dosyanız' bir XML dosyası değil - bir XML dosyası olmak için, ampersand'ın kaçması gerekirdi. Bu nedenle, XML dosyalarını okumak için tasarlanmış hiçbir yazılım hatasız olarak ayrıştırmayacaktır. Bu dosyayı oluşturan yazılımı doğru ("iyi oluşturulmuş") XML üretecek şekilde düzeltmeniz gerekir. Eğer insanlar iyi biçimlenmiş olmayan bir şeyler göndermeye başlarsa ve insanlar onu düzeltmeye çalışırsa, değişim için XML kullanmanın tüm faydaları tamamen ortadan kalkar.

+3

Bu sadece doğru değil. 1) Böyle bir dosyayı - herhangi bir internet tarayıcısının yaptığı gibi Xcode gibi IDE'leri ayrıştıran bir sürü yumuşaklık var. 2) Genelde üçüncü parti yumuşak olduğu için, XML'den çıkan yumuşaklığı düzeltmelerini istemezsiniz. – LiMar

+0

Böyle dosyaları ayrıştıran yazılım ürünleri olabilir, ancak böyle bir yazılım ürünü bir XML ayrıştırıcısı değildir. Uygun XML ayrıştırıcılarının XML dosyalarındaki tüm hataları bildirmesi gerekir. Internet tarayıcıları, kurabildiğim kadarıyla, çıkışsız bir işareti varsa XML olarak sunulan bir dosyayı doğru şekilde reddediyor. –

+2

Ve yazılım kötü XML oluşturduğunda, bunu düzeltmek doğru çözümdür. Kötü XML oluşturmak, kendi icadımızın özel bir formatını oluşturmakla aynı şeydir - bir standardın benimsenmesi ve daha sonra düzgün bir şekilde uygulanmasının bir anlamı yoktur. –

2

Önceleri "<?xml version='1.0' encoding='iso-8859-1'?>" satırını eklemeye dizgenin ipucu geldi.

>>> text = '''<?xml version="1.0" encoding="iso-8859-1"?> 
    ... <seuss><fish>red</fish><fish>blu\xe9</fish></seuss>''' 
>>> doc = elementtree.ElementTree.fromstring(text) 

bu sayfayı bakın https://mail.python.org/pipermail/tutor/2006-November/050757.html

[I XML ve işaretleri kaçmayı nasıl?] (Içinde
İlgili konular