Sto analizzando un file XML usando Sax Parser of Xerces.
È <?xml version="1.0" encoding="UTF-8"?>
richiesta la dichiarazione XML ?
Sto analizzando un file XML usando Sax Parser of Xerces.
È <?xml version="1.0" encoding="UTF-8"?>
richiesta la dichiarazione XML ?
Risposte:
In XML 1.0, la dichiarazione XML è facoltativa . Vedere la sezione 2.8 della raccomandazione XML 1.0 , dove si dice che "dovrebbe" essere usato - il che significa che è raccomandato, ma non obbligatorio. In XML 1.1, tuttavia, la dichiarazione è obbligatoria . Vedere la sezione 2.8 della raccomandazione XML 1.1 , dove si dice "DEVE" essere usato. Si prosegue anche affermando che se la dichiarazione è assente, ciò implica automaticamente che il documento è un documento XML 1.0.
Si noti che in un XML Dichiarazione del encoding
e standalone
sono entrambi opzionali. Solo il version
è obbligatorio. Inoltre, questi non sono attributi, quindi se sono presenti devono essere nell'ordine:, version
seguito da any encoding
, seguito da any 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"?>
Se non si specifica la codifica in questo modo, i parser XML tentano di indovinare quale codifica viene utilizzata. La raccomandazione XML 1.0 descrive un possibile modo in cui la codifica dei caratteri può essere rilevata automaticamente . In pratica, questo non è un grosso problema se l'input è codificato come UTF-8, UTF-16 o US-ASCII. Il rilevamento automatico non funziona quando rileva codifiche a 8 bit che utilizzano caratteri al di fuori dell'intervallo US-ASCII (ad esempio ISO 8859-1): evita di crearli se puoi.
Il standalone
indica se il documento XML può essere elaborato correttamente senza il DTD o meno. Le persone lo usano raramente. In questi giorni, è un male progettare un formato XML a cui mancano informazioni senza il suo DTD.
Aggiornare:
Un errore "errore prologo / codifica utf-8 non valida" indica che i dati effettivi trovati dal parser all'interno del file non corrispondevano alla codifica che la dichiarazione XML dice che è. O in alcuni casi i dati all'interno del file non corrispondevano alla codifica rilevata automaticamente.
Poiché il tuo file contiene un byte-order-mark (BOM), dovrebbe essere nella codifica UTF-16. Sospetto che la tua dichiarazione dica <?xml version="1.0" encoding="UTF-8"?>
che è ovviamente errato quando il file è stato modificato in UTF-16 da NotePad. La soluzione semplice è rimuovere il encoding
e semplicemente dire <?xml version="1.0"?>
. Potresti anche modificarlo per dire, encoding="UTF-16"
ma sarebbe sbagliato per il file originale (che non era in UTF-16) o se il file in qualche modo viene modificato di nuovo in UTF-8 o qualche altra codifica.
Non preoccuparti di provare a rimuovere la distinta componenti: non è questa la causa del problema. Usare NotePad o WordPad per modificare XML è il vero problema!
La dichiarazione xml è facoltativa, quindi il tuo xml è ben formato senza di essa. Ma si consiglia di usarlo in modo che i parser non facciano supposizioni errate, in particolare sulla codifica utilizzata.