2010-03-23 22 views
7

olmalıdır İlk önce, SAX ve Java için yeni olduğumu söyleyeyim.Biçimlendirme iyi biçimlendirilmiş

İyi biçimlendirilmemiş bir XML dosyasındaki bilgileri okumayı deniyorum.

Ben cevaben aşağıdaki hatayı alıyorum SAX veya DOM Ayrıştırıcı kullanmaya çalıştığınızda:

<format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
<format type="driver" t="123412">001;023</format> 
    ... 

Ben zorlayabilir miyim:

The markup in the document following the root element must be well-formed. 

Bu benim XML dosyası oluşturma şekilleridir Onlar iyi biçimlendirilmiş XML olmasa bile XML dosyalarını ayrıştırmak için SAX veya DOM?

Yardımlarınız için teşekkür ederim. Çok takdir edildi. Haythem

+2

FYI: Tanım olarak ... İyi biçimlendirilmemişse, ** ** değil. http://en.wikipedia.org/wiki/XML#Well-formedness_and_error-handling –

cevap

18

Yapmanız gereken en iyi şey, XML'yi iyi biçimlendirmek, muhtemelen biraz önceden işlemek. Bu durumda, sadece bu gibi (ve hatta bunu yapmak isteğe bağlıdır) bir XML bildirimi koyarak ve (isteğe bağlı değil) bir kök öğesi sağlayarak elde edebilirsiniz: Ben keyfi aldım Orada

<?xml version="1.0"?> 
<wrapper> 
    <format type="filename" t="13241">0;W650;004;AG-Erzgeb</format> 
    <format type="driver" t="123412">001;023</format> 
</wrapper> 

kök öğesi için "sarmalayıcı" adı; ne istersen onu olabilir.

+7

Sadece bu değişikliği diskinizde yapmanız gerekmediğini eklemek istiyorum, ancak bunu disk üzerinde yapabilirdiniz. filtreleme 'InputStream' /' Reader' sağlayarak uçun. Özellikle büyük dosyalar için (veya bir URL'den XML okumak) bu çok kullanışlı olabilir. A 'SequenceInputStream' burada yararlı olabilir: http://java.sun.com/javase/6/docs/api/java/io/SequenceInputStream.html –

+0

İyi bir olasılık. ayrıştırmak için daha kolay değil mi? parse() mehtode'u açıp, iyi oluşturulmamış durumu yok saymak için üzerine yazabilir miyim? – Haythem

+2

Haythem: Muhtemelen, çünkü ayrıştırıcı kütüphanenin içinde derindir ve böyle bir tarayıcının davranışı tanımlanmayacaktır (XML kütüphaneleri, XML'in birden fazla kök öğesiyle nasıl işleneceğini bilmemektedir). Bu şekilde yapmak XML'inizi iyi biçimlendirir ve ** tüm ** XML-bilinçli araçların aniden halledilmesini sağlar (orada başka yanlış parçaların olması şartıyla). –

1

İpucu: sax veya stax kullanarak, iyi biçimlendirilmemiş bir xml belgesini, FIRST "well forming-ness" hatası ile karşılaşana kadar başarılı bir şekilde ayrıştırabilirsiniz. DOM Eğer xml dosya daha sonra bir ağaç oluşturmak tarar gibi

(ı ... Bu çok fazla yardım olmadığını biliyoruz)

0

, ağacın kök düğümü olarak 1 Yanıt gibidir. Ancak, Ayrıştırıcı bulamıyorsa, hatta ağacı bile kurabilir. Yani, DOM veya Sax tarafından ayrıştırılmadan önce xml dosyasının önceden işlenmesi daha iyidir.

İlgili konular