2010-04-08 42 views
47

Özel bir XML dosyası alıp onu ayrıştırıp Java'da bir program yazıyorum. Depolama için XML dosyasını kullanıyorum. Eclipse'de aşağıdaki hatayı alıyorum.Java ayrıştırma XML belgesi "İçerik prologda izin verilmez" verir. hata

[Fatal Error] :1:1: Content is not allowed in prolog. 
org.xml.sax.SAXParseException: Content is not allowed in prolog. 
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239) 
    at  com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283 ) 
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208) 
    at me.ericso.psusoc.RequirementSatisfier.parseXML(RequirementSatisfier.java:61) 
    at me.ericso.psusoc.RequirementSatisfier.getCourses(RequirementSatisfier.java:35) 
    at  me.ericso.psusoc.programs.RequirementSatisfierProgram.main(RequirementSatisfierProgram.java:23 ) 

XML dosyasının başında yer almaktadır:

<?xml version="1.0" ?> 
<PSU> 
    <Major id="IST"> 
     <name>Information Science and Technology</name> 
     <degree>B.S.</degree> 
     <option> Information Systems: Design and Development Option</option> 
     <requirements> 
      <firstlevel type="General_Education" credits="45"> 
       <component type="Writing_Speaking">GWS</component> 
       <component type="Quantification">GQ</component> 

programı XML dosyasında okuyabilecek ama çözümlenir org.w3c.dom.Document olsun DocumentBuilder.parse(XMLFile) çağırdığınızda, yukarıdaki hatası alıyorum.

XML dosyamın prologunda geçersiz içeriğim olduğu görünmüyor. Neyin yanlış olduğunu anlayamıyorum. Lütfen yardım et. Teşekkürler.

+2

gibi bir adresi girmeniz gerekiyor. Hatanımı buldum. Dosyanın içinde bulunduğu dosyayı okuyordum ve dosyayı değil.Görünüşe göre bir dosyada bir dosya olarak okuyup File.exists() dosyasını çağırıyorsanız, yine de doğru olacaktır. Aptal bana ... Yardım için teşekkürler. – ericso

+0

cevabımı http://stackoverflow.com/questions/3665554/about-saxparseexception-content-is-not-allowed-in-prolog/7023984 adresinde kontrol edin veya http://mark.koli.ch/2009 adresini ziyaret edin. /02/resolving-orgxmlsaxsaxparseexception-content-is-not-allowed-in-prolog.html – Starfish

+0

kimseye yardım edip etmeyeceğini bilmiyorum ama flavorDimensions kullanmaya çalışıyorum ve resmiyette resm-xhdpi'yi resmime koymaya çalışırken bu hatayı aldım. Bir kez ben çizilebilir .. değiştirildi .. tüm sabit – dangalg

cevap

3

Belge bana iyi görünüyor ama görünmez karakterler içerdiğinden şüpheleniyorum. İlk "<" dan önce bir şey olmadığını kontrol etmek için bir hex editöründe açın. XML üstbilgisindeki boşlukların boşluk olduğundan emin olun. Belki de "?>" Den önce alanı sileriz. Hangi satır sonlarının kullanıldığını kontrol edin.

Belgenin UTF-8 olduğundan emin olun. Bazı pencere düzenleyiciler belgeyi UTF-16 olarak kaydederler (yani, her saniye bayt 0'dır).

+0

Ben Eclipse metin editörü XML dosyasını düzenliyordum. Ben bir Mac'dayım ve ayrıca BBEdit kullanıyorum. Görünmez karakterleri kontrol edeceğim. – ericso

+0

BBEdit (Görünüm> Metin Gösterimi> Görünmezlikleri Göster) 'de görünmez karakterler için kontrol ettim ve XML bildiriminde görünmez karakterler göremiyorum. Beyannamenin sonunda boşlukları da sildim. encoding = "UTF-8" ve encoding = "UTF-16 ekledim ve hala hata alıyorum. – ericso

+0

Dosyanın kodlanması nedir? Örneğin ne düşündüğünüzü değil, editörün ne diyor? –

7

XML dosyanızın başında gizli bir boşluk bulunmadığından emin olun. Ayrıca, düğümde kodlama = "UTF-8" (veya 16? İpucu yok) içerebilir.

+1

Bu maalesef büyük olasılıkla sebebi. – Esko

+0

Gizli karakterler için BBEdit'te kontrol edildi ve XML bildirimi için kodlama özniteliği eklendi. Her ikisi de tamir etmedi. – ericso

0

Eğer xml dosyası kontrol edebiliyoruz iseniz, dosyanın başlangıcına biraz daha fazla bilgi eklemeyi deneyin:

<?xml version="1.0" encoding="UTF-16" standalone="no"?> 
+0

Her iki standalone = "no" ve standalone = "yes" ekledim. İkisi de bana aynı hatayı veriyor. – ericso

+2

hmmm ... deneyeceğim bir sonraki şey kaba kuvvettir - ayrıştırıcı aracılığıyla sahte bir belge almayı deneyin, daha sonra sorunu tanımlayana kadar yavaşça orijinal belgenizin kısımlarını ekleyin. :-) –

0

Kontrol XML dosyasında herhangi sözdizimi sorunu. Xsl/xsp ile Cocoon üzerinde çalışırken bu hatayı buldum ve var olmayan bir düğümü veya bunun gibi bir şeyi kullanarak bir değişken tanımladım. Tüm XML'i kontrol edin.

+0

'dan önce bu yoldan aşağı düştüm Ayrıştırılmış belgeyle bir şey yapmadan önce hatayı alıyorum. DocumentBuilder.parse (XMLFile) adını verdiğimde başarısız oluyor. XML dosyasını XML geçerlilik denetleyicisi (xmlvalidation.com) aracılığıyla çalıştırdım ve çok iyi geçti. – ericso

+0

Dosya belirtilen konumda mevcut mu? Belki programınız dosyanın içeriğine erişemiyor ve çözümleyici sadece ne bulduğunu xml geçerli değil diyor ... sadece tahmin. – Alfabravo

+0

@Alfabravo biraz farklı bir soru, eğer bir ayrıştırma hatası alıyorum bu istisna nasıl yakalayabilirim biliyor musunuz. Java belge oluşturucu, hata akışı üzerine baskı yerine istisna atmıyor, bu yüzden bozuk dosya sağlandıysa kullanıcıyı nasıl bilgilendirebilirim? –

19

Lütfen xml dosyasını, bunun gibi gereksiz bir karakter olup olmadığını kontrol edin . Varsa, kaldırmak için lütfen aşağıdaki sözdizimini kullanın.

String XString = writer.toString(); 
XString = XString.replaceAll("[^\\x20-\\x7e]", ""); 
+2

Bu gerçekten basit bir teknik, hızlı bir düzeltme olarak oldukça kullanışlı buldum. Ancak, yeni satırları tutmak için, regex 'replaceAll (" [^ \\ x20 - \\ x7e \\ x0A] "," ") tercih edebilirsiniz;' – Patrick

1

Şema ile uygun xml kodlama ve eşleme yaptığınızı varsayalım.

Eğer hala bu hatayı alıyorsanız, kullandığınız xml ve giriş türünün unmarshalls kodunu kontrol edin. XML belgeleri kendi kodlamalarını bildirdiğinden, bir Reader yerine bir InputStream nesnesinden bir StreamSource nesnesi oluşturmak tercih edilir, böylece XML işlemci deklare edilen kodlamayı doğru şekilde işleyebilir [Ref Book: Bir Özetle Java]

Bunu umarız yardım eder!

8

Bu da bu sorunun bir çözümü olduğunu düşünüyorum. Ben aynı değişiklikleri yaparak benim sorunlarına bir çözüm var 'BOM olmadan UTF-8 kodlama'

için

'UTF-8 Encode' adresinin belge türünü değiştirme

.

1

Dosya için doğru adresi belirtmiyorsunuz. C:/Users/xyz/Desktop/myfile.xml

+0

OP bunu buldu ve yorumda belirtilen soru – kolossus

İlgili konular