Estoy analizando un archivo XML usando Sax Parser of Xerces.
¿Se <?xml version="1.0" encoding="UTF-8"?>
requiere la declaración XML ?
Estoy analizando un archivo XML usando Sax Parser of Xerces.
¿Se <?xml version="1.0" encoding="UTF-8"?>
requiere la declaración XML ?
Respuestas:
En XML 1.0, la Declaración XML es opcional . Ver sección 2.8 de la Recomendación XML 1.0 , donde dice que "debería" usarse, lo que significa que se recomienda, pero no es obligatorio. En XML 1.1, sin embargo, la declaración es obligatoria . Consulte la sección 2.8 de la Recomendación XML 1.1 , donde dice "DEBE" ser utilizado. Incluso continúa diciendo que si la declaración está ausente, eso automáticamente implica que el documento es un documento XML 1.0.
Tenga en cuenta que en una Declaración XML el encoding
ystandalone
son opcionales. Solo el version
es obligatorio. Además, estos no son atributos, por lo que si están presentes deben estar en ese orden: version
seguidos de cualquiera encoding
, seguidos de cualquiera 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"?>
Si no especifica la codificación de esta manera, los analizadores XML intentan adivinar qué codificación se está utilizando. La Recomendación XML 1.0 describe una posible forma en que la codificación de caracteres se puede detectar automáticamente . En la práctica, esto no es un gran problema si la entrada está codificada como UTF-8, UTF-16 o US-ASCII. La detección automática no funciona cuando encuentra codificaciones de 8 bits que usan caracteres fuera del rango US-ASCII (por ejemplo, ISO 8859-1). Evite crearlos si puede.
El standalone
indica si el documento XML se puede procesar correctamente sin el DTD o no. La gente rara vez lo usa. En estos días, es malo diseñar un formato XML al que le falta información sin su DTD.
Actualizar:
Un error de "error de prólogo / codificación utf-8 no válida" indica que los datos reales que el analizador encontró dentro del archivo no coincidían con la codificación que la declaración XML dice que es. O, en algunos casos, los datos dentro del archivo no coincidían con la codificación autodetectada.
Como su archivo contiene una marca de orden de bytes (BOM), debe estar en codificación UTF-16. Sospecho que su declaración dice <?xml version="1.0" encoding="UTF-8"?>
que obviamente es incorrecto cuando NotePad ha cambiado el archivo a UTF-16. La solución simple es eliminar el encoding
y simplemente decir <?xml version="1.0"?>
. También puede editarlo para decirlo, encoding="UTF-16"
pero eso sería incorrecto para el archivo original (que no estaba en UTF-16) o si el archivo de alguna manera vuelve a cambiarse a UTF-8 o alguna otra codificación.
No se moleste en tratar de eliminar la lista de materiales, esa no es la causa del problema. ¡Usar NotePad o WordPad para editar XML es el verdadero problema!
La declaración XML es opcional, por lo que su XML está bien formado sin ella. Pero se recomienda usarlo para que los analizadores no hagan suposiciones incorrectas, específicamente sobre la codificación utilizada.