Xerces Sax Parser kullanarak bir XML dosyasını ayrıştırıyorum.
XML bildirimi <?xml version="1.0" encoding="UTF-8"?>
gerekli mi?
Xerces Sax Parser kullanarak bir XML dosyasını ayrıştırıyorum.
XML bildirimi <?xml version="1.0" encoding="UTF-8"?>
gerekli mi?
Yanıtlar:
XML 1.0'da, XML Bildirgesi ise opsiyonel . XML 1.0 Tavsiyesinin "kullanılması gerektiğini" söylediği bölüm 2.8'e bakın - yani tavsiye edilir, ancak zorunlu değildir. XML 1.1'de ise bildirim zorunludur . Kullanılması "ZORUNLU" yazan XML 1.1 Tavsiyesi bölüm 2.8'e bakın . O bile devlete gider eğer beyanı yoktur, yani otomatik belge XML 1.0 belgesidir ima eder.
Bir o Not Deklarasyonu XMLencoding
ve standalone
hem isteğe bağlıdır. Yalnızca version
zorunludur. Ayrıca, bunlar öznitelikler değildir, bu nedenle eğer mevcutlarsa, şu sırayla olmalıdırlar: version
ve ardından herhangi biri encoding
, ardından herhangi biri standalone
.
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?xml version="1.0" standalone="yes"?>
<?xml version="1.0" encoding="UTF-16" standalone="yes"?>
Kodlamayı bu şekilde belirtmezseniz, XML ayrıştırıcıları hangi kodlamanın kullanıldığını tahmin etmeye çalışır. XML 1.0 Önerisi, karakter kodlamanın otomatik olarak saptanmasının olası bir yolunu açıklar . Pratikte, girdi UTF-8, UTF-16 veya US-ASCII olarak kodlanmışsa bu pek sorun olmaz. Otomatik algılama, US-ASCII aralığı dışındaki karakterleri kullanan 8 bit kodlamalarla karşılaştığında çalışmaz (örn. ISO 8859-1) - yapabiliyorsanız bunları oluşturmaktan kaçının.
standalone
XML belgesi doğru DTD olmadan veya işlenebilir olup olmadığını gösterir. İnsanlar onu nadiren kullanır. Bu günlerde, DTD'siz bilgileri eksik olan bir XML formatı tasarlamak kötü.
Güncelleme:
"Prolog hatası / geçersiz utf-8 kodlaması" hatası, ayrıştırıcının dosya içinde bulduğu gerçek verilerin XML bildiriminde söylediği kodlamayla eşleşmediğini gösterir. Veya bazı durumlarda, dosyanın içindeki veriler otomatik olarak algılanan kodlamayla eşleşmedi.
Dosyanız bir bayt sırası işareti (BOM) içerdiğinden, UTF-16 kodlamasında olmalıdır. Bildiriminizin <?xml version="1.0" encoding="UTF-8"?>
, dosya NotePad tarafından UTF-16 olarak değiştirildiğinde bunun açıkça yanlış olduğunu söylediğinden şüpheleniyorum . Basit çözüm, kaldırmak encoding
ve basitçe söylemektir <?xml version="1.0"?>
. Bunu söylemek için de düzenleyebilirsiniz, encoding="UTF-16"
ancak bu orijinal dosya için (UTF-16'da değildi) veya dosya bir şekilde UTF-8'e veya başka bir kodlamaya değiştirilirse yanlış olur.
Malzeme Listesini kaldırmaya çalışmakla uğraşmayın - sorunun nedeni bu değil. XML düzenlemek için NotePad veya WordPad kullanmak gerçek problemdir!
Xml bildirimi isteğe bağlıdır, bu nedenle xml'niz onsuz iyi biçimlendirilir. Ancak, ayrıştırıcılar tarafından özellikle kullanılan kodlama hakkında yanlış varsayımlarda bulunulmaması için kullanılması önerilir.