Error: el objetivo de instrucción de procesamiento que coincide con "[xX] [mM] [lL]" no está permitido

181

Este error,

El objetivo de instrucción de procesamiento que coincida con "[xX] [mM] [lL]" no está permitido

ocurre cada vez que ejecuto una página XSLT que comienza de la siguiente manera:

<?xml version="1.0" encoding="windows-1256"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:include href="../header.xsl"/>
  <xsl:template match="/">
    <xsl:call-template name="pstyle"/>
    <xsl:call-template name="Validation"/>
    <xsl:variable name="strLang">
      <xsl:value-of select="//lang"/>
    </xsl:variable>
    <!-- ////////////// Page Title ///////////// -->
    <title>
        <xsl:value-of select="//ListStudentFinishedExam.Title"/>
    </title>

Nota : Eliminé los espacios iniciales antes de la primera línea, ¡pero el error aún ocurre!

Jugador de Java
fuente
1
Este error no es particular de XSLT; se relaciona con el análisis XML en general. Compruebe no solo su archivo XSLT principal, sino también cualquier archivo XSLT incluido / importado ( ../header.xsl), así como el documento de entrada XML que se está transformando, para cada una de las tres posibilidades que enumero en mi respuesta a continuación .
kjhughes

Respuestas:

365

Las herramientas basadas en Xerces emitirán el siguiente error

The processing instruction target matching "[xX][mM][lL]" is not allowed.

cuando se encuentra una declaración XML en cualquier lugar que no sea la parte superior de un archivo XML.

Este es un mensaje de diagnóstico válido; otros analizadores XML deberían emitir un mensaje de error similar en esta situación.

Para corregir el problema, verifique las siguientes posibilidades:

  1. Existe algún espacio en blanco u otro contenido visible antes de la <?xml ?> declaración.

    Resolución : elimine el espacio en blanco o cualquier otro contenido visible antes de la declaración XML.

  2. Existe algún contenido invisible antes de la <?xml ?> declaración. Lo más común es que se trate de una marca de orden de bytes (BOM) .

    Resolución : elimine la lista de materiales utilizando técnicas como las sugeridas por la página W3C en la lista de materiales en HTML.

  3. Existe una <?xml ?>declaración perdida dentro del contenido XML. Esto puede suceder cuando los archivos XML se combinan mediante programación o mediante cortar y pegar. Solo puede haber una <?xml ?>declaración en un archivo XML, y solo puede estar en la parte superior.

    Resolución : <?xmlbusque de manera que no distinga entre mayúsculas y minúsculas y elimine del archivo todas las declaraciones XML, excepto la superior.

kjhughes
fuente
Para un <? Xml perdido, ¿cómo harías para recorrer el archivo xml para encontrarlo? Al igual que sería algo así como el uso de saxofón o analizadores stax trabajo fino (intentado hacerlo con stax pero no lo reconoce)
user2062207
Para eliminar una declaración XML perdida, debe tratar el archivo como texto, no como XML, porque una declaración XML adicional evita que el XML esté bien formado . Use un editor de texto o abra el archivo mediante programación y actívelo como texto para eliminar la <?xml ?>declaración perdida antes de tratarlo como un archivo XML.
kjhughes
44
Tienes mis condolencias ya que los problemas intermitentes son notoriamente difíciles de depurar. Sin embargo, no puedo ayudar más desde aquí que decirle que este error es definitivamente determinista : siempre será un error que una declaración XML aparezca más de una vez o en cualquier otro lugar que no sea la parte superior de un archivo XML. Buena suerte.
kjhughes
1
Si su mensaje XML se almacena como una Cadena, puede intentar hacer un recorte () en la Cadena antes de pasarlo a su Analizador SAX. Por alguna razón, recibí respuestas XML que introdujeron espacios en blanco adicionales al comienzo, lo que resultó en el error Xerces anterior cuando se analizó.
Robert Casey
1
Es un hilo antiguo, pero esto podría ayudar a alguien: después de copiar manualmente un archivo xml del navegador y copiar y pegar en un archivo de texto local y guardarlo como xml, obtuvimos el mismo error (el archivo en cuestión era un pom.xml y el error fue recibido al hacer una compilación en gradle). Descubrimos que había una línea vacía en la parte superior del archivo xml, incluso antes de la etiqueta <? Xml>, ¡la eliminó y funcionó!
JavaTec
13

La razón para mí es 2 de los siguientes códigos en un xml

<?xml version="1.0" encoding="utf-8"?>
Anuj Jindal
fuente
2
Elimino espacios delante de las versiones <? Xml ... y eso funcionó para mí.
xpagesbeast
1
Se esta respuesta ya preveía : # 3: Resolución : Buscar <?xmlde manera sensible a las mayúsculas y eliminar la parte superior, pero la declaración XML del archivo.
kjhughes
Puede confirmar, alguien estropeó el copiar y pegar.
fl0w
3

Había un mensaje de Copyright generado automáticamente XMLy una línea en blanco antes de la <resources>etiqueta, una vez que lo eliminé mi compilación fue exitosa.

ingrese la descripción de la imagen aquí

Hitesh Sahu
fuente
1
La eliminación de comentarios o espacios en blanco antes de la declaración XML podría eliminar este error, pero para el documento que se muestra en su imagen, no es necesario eliminar el comentario o la línea en blanco después de la declaración XML.
kjhughes
1

Otra razón del error anterior es el archivo jar dañado. Obtuve el mismo error pero para Junit cuando ejecuté pruebas unitarias. Eliminar el jar y descargarlo nuevamente soluciona el problema.

Peter T.
fuente
0

en mi caso era una ruta incorrecta en un archivo de configuración: no se encontró el archivo (la ruta era incorrecta) y salió con esta excepción:

Error al configurar desde el flujo de entrada. La causa inicial fue que el objetivo de instrucción de procesamiento que coincida con "[xX] [mM] [lL]" no está permitido.

pikimota
fuente
0

Tuve un problema similar con 50,000 archivos rdf / xml en 5,000 directorios (el archivo de catálogo del Proyecto Gutenberg). Lo resolví con disturbios (en la distribución de jena)

el directorio es cache / epub / NN / nn.rdf (donde NN es un número)

en el directorio arriba del directorio donde están todos los archivos, es decir, en caché

riot epub/*/*.rdf --output=turtle > allTurtle.ttl

Esto produce posiblemente muchas advertencias, pero el resultado está en un formato que se puede cargar en jena (utilizando la interfaz web fuseki).

sorprendentemente simple (al menos en este caso).

usuario855443
fuente
0

Para PHP, coloque esta línea de código antes de comenzar a imprimir su XML:

while(ob_get_level()) ob_end_clean();
Casa en la playa
fuente