2016-07-25 8 views
0

Это документ XML (предложение и пробелы до инструкции по обработке декларации XML и XSLT являются частью входа):Ошибка синтаксического анализа XML: Содержимое не допускается в прологе

This XML file does not appear to have any style information associated with it. The document tree is shown below. 


    <?xml version="1.0" encoding="UTF-8"?> 
    <?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
     <mts:meta name="elapsed-time" value="18" /> 
     <exchange-documents> 
     <exchange-document country="US" number="8049504"> 
     .... 
     .... 
     .... 

     </exchange-document> 
     </exchange-documents> 

Я разборе XML и использование XPath. В большинстве файлов XML, то первая строка содержит некоторый текст или пробелы (см вышеуказанную XML)

Без этого ведущего текста, он разбирает успешно, но если появляется какой-либо текст, он выдает ошибку ниже:

--- exec-maven-plugin:1.2.1:exec (default-cli) @ XMLHandling --- 

[Fatal Error] :1:1: Content is not allowed in prolog.

Как я могу обойти это?

код, который я использую:

public static void main(String[] args) throws ParseException { 

     String filePath = "D:/newxml.xml"; 

     try { 
      FileInputStream file = new FileInputStream(new File(filePath)); 
      DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = builderFactory.newDocumentBuilder(); 
      Document xmlDocument = builder.parse(file); 
      XPath xPath = XPathFactory.newInstance().newXPath(); 

      String pubOrPatentNumber = xPath.compile("//preference").evaluate(xmlDocument); 
      ... 
      ... 
      } 
      } 

можно вручную удалить текст и выполнить, но мне нужно, чтобы решить эту проблему в своем коде, чтобы автоматически очистить вход.

+1

Скорее всего, это Байт Отметка. См. Возможное решение здесь: http://stackoverflow.com/questions/21891578/removing-bom-characters-using-java –

+1

На уровне кода вы можете использовать функции библиотеки строк, т. Е. Искать первое появление «< ?» в строке ввода, содержащей документ, затем возьмите подстроку, начинающуюся здесь, а затем проанализируем ее. Однако я бы посоветовал действовать осторожно из-за ошибок корректности. Это лучшая практика, чтобы убедиться, что документы XML всегда хорошо сформированы, чтобы избежать таких проблем. Надеюсь, это поможет! –

ответ

0

В документе есть две проблемы с точки зрения корректности.

  1. Нельзя иметь два элемента верхнего уровня (mts: meta, exchange-documents).

  2. Префикс mts не объявлен.

Этот скорректировала документ хорошо сформирован (но нужно адаптировать URI пространства имен для абонентов МТС, и выбрать подходящее имя для элемента оберточной):

<?xml version="1.0" encoding="UTF-8"?> 
<?xml-stylesheet type="text/xsl" href="/3.0/style/exchange.xsl"?> 
<root> 
    <mts:meta xmlns:mts="http://www.example.com" name="elapsed-time" value="18" /> 
    <exchange-documents> 
     <exchange-document country="US" number="8049504"> 
      .... 
      .... 
      .... 
     </exchange-document> 
    </exchange-documents> 
</root> 
+0

Файл Xml поставляется с http, т. Е. Я разбираю xml на ходу, ударяю по URL-адресу, создаю соединение и т. Д., Каждый Xml должна быть первой. «Этот XML-файл не имеет никакой информации о стиле с ним. Дерево документов показано ниже. " из-за первой строки я не могу разобрать документ, а также не смог обновить xml – Prabu

+0

обновить xml-файл в моем вопросе – Prabu

+1

Спасибо, что обратились к нему, Prabu и сожалею об этом. Я думал, что это артефакт с копией и вставкой. Тогда это еще одна проблема. Кроме того, если это документ, полученный через HTTP, то это означает, что на сервере, обслуживающем этот XML, что-то не так, если, возможно, это не фрагмент XML, а не документ. Является ли это предложение отображаемым браузером, поскольку браузеры обычно добавляют колокола и свистки при отображении XML? Если да, можете ли вы попытаться просмотреть фактический исходный код и поделиться им? Браузеры обычно позволяют просматривать исходный XML. –

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