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 encodinge standalonesono entrambi opzionali. Solo il versionè obbligatorio. Inoltre, questi non sono attributi, quindi se sono presenti devono essere nell'ordine:, versionseguito 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 standaloneindica 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 encodinge 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.