it-swarm.dev

Java o documento XML de análise fornece "Conteúdo não permitido no prólogo". erro

Estou escrevendo um programa em Java que pega um arquivo XML personalizado e o analisa. Estou usando o arquivo XML para armazenamento. Eu estou recebendo o seguinte erro no Eclipse.

[Fatal Error] :1:1: Content is not allowed in prolog.
org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at com.Sun.org.Apache.xerces.internal.parsers.DOMParser.parse(DOMParser.Java:239)
    at     com.Sun.org.Apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.Java:283  )
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.Java:208)
    at me.ericso.psusoc.RequirementSatisfier.parseXML(RequirementSatisfier.Java:61)
    at me.ericso.psusoc.RequirementSatisfier.getCourses(RequirementSatisfier.Java:35)
    at     me.ericso.psusoc.programs.RequirementSatisfierProgram.main(RequirementSatisfierProgram.Java:23  )

O início do arquivo XML está incluído:

<?xml version="1.0" ?>
<PSU>
     <Major id="IST">
        <name>Information Science and Technology</name>
        <degree>B.S.</degree>
        <option> Information Systems: Design and Development Option</option>
        <requirements>
            <firstlevel type="General_Education" credits="45">
                <component type="Writing_Speaking">GWS</component>
                <component type="Quantification">GQ</component>

O programa é capaz de ler no arquivo XML, mas quando eu chamo DocumentBuilder.parse(XMLFile) para obter um org.w3c.dom.Document analisado, recebo o erro acima.

Não me parece que eu tenha conteúdo inválido no prólogo do meu arquivo XML. Eu não consigo descobrir o que está errado. Por favor ajude. Obrigado.

49
ericso

Por favor, verifique o arquivo xml se tem algum caractere de lixo como este �.Se existe, por favor use a seguinte sintaxe para removê-lo.

String XString = writer.toString();
XString = XString.replaceAll("[^\\x20-\\x7e]", "");
19
Gopal

Eu acho que isso também é uma solução desse problema.

Altere o tipo de documento de 'Codificar em UTF-8' Para 'Codificar em UTF-8 sem BOM'

Eu resolvi meu problema fazendo as mesmas alterações.

9
Java_Alert

Certifique-se de que não haja espaços em branco ocultos no início do seu arquivo XML. Além disso, talvez inclua encoding = "UTF-8" (ou 16? No indice) no nó.

7
Ben J

O documento parece bem para mim, mas suspeito que ele contenha caracteres invisíveis. Abra-o em um editor hexadecimal para verificar se realmente não existe nada antes do primeiro "<". Certifique-se de que os espaços no cabeçalho XML sejam espaços. Talvez apagar o espaço antes de "?>". Verifique quais quebras de linha são usadas.

Certifique-se de que o documento seja adequado para UTF-8. Alguns editores do Windows salvam o documento como UTF-16 (ou seja, cada segundo byte é 0).

3
Aaron Digulla

Você não está fornecendo o endereço correto para o arquivo. Você precisa fornecer um endereço como C:/Users/xyz/Desktop/myfile.xml

1
Amit Agarwal

Eu suponho que você tem codificação xml adequada e correspondência com o Schema.

Se você ainda receber este erro, verifique o código que desmarca o xml e o tipo de entrada que você usou. Como os documentos XML declaram sua própria codificação, é preferível criar um objeto StreamSource de um InputStream em vez de um Reader, para que o processador XML possa manipular corretamente a codificação declarada [Ref Book: Java in A Nutshell]

Espero que isto ajude!

1
spark07

Se você conseguir controlar o arquivo xml, tente adicionar um pouco mais de informações ao início do arquivo:

<?xml version="1.0" encoding="UTF-16" standalone="no"?>
0
Drew Johnson

Verifique qualquer problema de sintaxe no arquivo XMl. Eu encontrei este erro ao trabalhar em xsl/xsp com Cocoon e eu defino uma variável usando um nó não existente ou algo parecido. Verifique o XML inteiro.

0
Alfabravo