2010-04-08 2 views
47

Я пишу программу на Java, которая берет пользовательский XML-файл и анализирует его. Я использую XML-файл для хранения. Я получаю следующую ошибку в Eclipse.Java-анализ XML-документа дает «Недопустимый контент в прологе». error

[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 ) 

Начало файла XML входит:

<?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> 

Программа умеет читать в файле XML, но когда я называю DocumentBuilder.parse(XMLFile), чтобы получить обработанную org.w3c.dom.Document, я получаю ошибку выше.

Мне не кажется, что у меня есть недопустимый контент в прологе моего XML-файла. Я не могу понять, что не так. Пожалуйста помоги. Благодарю.

+2

Я нашел свою ошибку. Я читал в папке, в которой находился файл, а не сам файл.По-видимому, если вы читаете в папке в виде файла и вызываете File.exists(), он все равно вернет true. Глупо мне ... Спасибо за помощь. – ericso

+0

проверить мой ответ на http://stackoverflow.com/questions/3665554/about-saxparseexception-content-is-not-allowed-in-prolog/7023984 или просто проверить эту ссылку http://mark.koli.ch/2009 /02/resolving-orgxmaxaxsaxparseexception-content-is-not-allowed-in-prolog.html – Starfish

+0

не знаю, поможет ли это кому-либо, но я получил эту ошибку, пытаясь использовать flavorDimensions и помещая drawable-xhdpi под res в моих ароматах. Как только я изменил его на drawable .. все исправлено – dangalg

ответ

3

Документ выглядит хорошо для меня, но я подозреваю, что он содержит невидимые символы. Откройте его в шестнадцатеричном редакторе, чтобы проверить, что на самом деле ничего не происходит до самого первого «<». Убедитесь, что пробелы в заголовке XML являются пробелами. Может быть, удалить пробел перед «?>». Проверьте, какие разрывы строк используются.

Убедитесь, что документ соответствует UTF-8. Некоторые редакторы окон сохраняют документ как UTF-16 (т. Е. Каждый второй байт равен 0).

+0

Я редактировал XML-файл в текстовом редакторе Eclipse. Я нахожусь на Mac, и я также использую BBEdit. Я проверю невидимые персонажи. – ericso

+0

Я проверил невидимые символы в BBEdit (вид> Текстовый дисплей> Показать невидимые), и я не вижу в объявлении XML невидимых символов. Я также удалил пробел в конце объявления. Я добавил кодировку = «UTF-8» и кодировку = «UTF-16», и я все еще получаю ошибку. – ericso

+0

Что такое кодировка файла? То есть не то, что вы думаете, а то, что говорит ваш редактор? –

7

Убедитесь, что в начале файла XML нет скрытых пробелов. Также возможно включить кодировку = "UTF-8" (или 16? Нет подсказки) в узле.

+1

Скорее всего, это причина. – Esko

+0

Проверено в BBEdit для скрытых символов и добавлено атрибут кодирования в декларацию XML. Оба не исправили это. – ericso

0

Если вы в состоянии контролировать файл XML, попробуйте добавить немного больше информации в начале файла:

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

Я добавил как standalone = "no", так и standalone = "yes". Оба дают мне ту же ошибку. – ericso

+2

hmmm ... следующее, что я попробую, это грубая сила - попробуйте получить фиктивный документ через парсер, затем медленно добавьте части своего оригинального документа, пока не сможете определить проблему. Я был до этой дороги раньше :-) –

0

Проверьте какие-либо проблемы синтаксиса в файле XML. Я нашел эту ошибку при работе с xsl/xsp с Cocoon, и я определяю переменную, используя несуществующий узел или что-то в этом роде. Проверьте весь XML.

+0

Я получаю сообщение об ошибке, прежде чем я смогу что-либо сделать с анализируемым документом. Ошибка при вызове DocumentBuilder.parse (XMLFile). Я запустил XML-файл с помощью механизма проверки XML (xmlvalidation.com), и все прошло отлично. – ericso

+0

Доступен ли файл в указанном месте? Возможно, ваша программа не может получить доступ к содержимому файла, и синтаксический анализатор просто говорит, что он обнаружил, что не является xml действительным ... просто гадать. – Alfabravo

+0

@Alfabravo немного другой вопрос, знаете ли вы, если я получу ошибку синтаксического анализа, как я могу поймать это исключение. Конструктор документов в java не генерирует исключение, а печатает в потоке ошибок, поэтому как я могу уведомить пользователя, если был предоставлен коррумпированный файл? –

19

Проверьте файл xml, есть ли у него какой-либо символ нежелательной почты, такой как .If существует, пожалуйста, используйте следующий синтаксис для его удаления.

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

Я нашел эту очень простую технику очень полезной в качестве быстрого исправления. Однако для сохранения новых строк вы можете предпочесть регулярное выражение 'replaceAll (" [^ \\ x20 - \\ x7e \\ x0A] "," ");' – Patrick

1

Я предполагаю, что у вас есть правильная кодировка xml и соответствие схеме.

Если вы все еще получаете эту ошибку, проверьте код, который отменяет xml и тип ввода, который вы использовали. Поскольку документы XML объявляют свою собственную кодировку, предпочтительно создать объект StreamSource из InputStream, а не из Reader, чтобы XML-процессор мог корректно обрабатывать заявленную кодировку. [Ref Book: Java in A Nutshell]

Надеюсь, что это помогает!

8

Я думаю, что это также решение этой проблемы.

Изменить тип документа «Encode в UTF-8» Чтобы «Кодировать в UTF-8 без BOM»

я получил решить мою проблему, выполнив те же изменения.

1

Вы не указали верный адрес файла. Вам необходимо указать адрес C:/Users/xyz/Desktop/myfile.xml

+0

OP обнаружил это и указал его в комментарии к вопрос – kolossus

Смежные вопросы