2014-12-02 4 views
1

Similar to this question, but unfortunately didn't helpFatal Error - Содержимое не допускается в прологе

Я пытаюсь разобрать строку в XML в Java и постоянно получаю ошибку:

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

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

XML

<?xml version="1.0" encoding="UTF-8"?> 
<?xfa generator="ff99v250_01" APIVersion="1.4.3139.0"?> 
<jfxpf:XPF xmlns:jfxpf="http://www.xfa.com/schema/xml-package"> 
    <jfxpf:Package> 
     <jfxpf:Resource Location="GenReq"> 
     <jfxpf:Link ContentType="application/x-jetform-cft" /> 
     </jfxpf:Resource> 
     <jfxpf:Resource Location="default.xml"> 
     <jfxpf:Content ContentType="text/xml" Location="default.xml"> 
      <xfa:Data xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"> 
       <xfa:DataGroup> 
        <data xmlns:xfe="http://www.xfa.org/schema/xfa-events/1.0" xfe:script="$config.proto.common.template.uri='GenReq'" xfe:event="$config:load"> 
        <?jetform ^Dat ^page 1?> 
        <FR_NAME>Administrator</FR_NAME> 
        <JFWF_DELEGATE /> 
        <ADHOC_DLN_ACTOR /> 
        <ADHOC_DLN_MSG /> 
         <ADHOC_DLN_TIME /> 
        <ADHOC_DLN_UNITS>Days</ADHOC_DLN_UNITS> 
        <ADHOC_RMD_MSG /> 
        <ADHOC_RMD_TIME /> 
        <ADHOC_RMD_UNITS>Days</ADHOC_RMD_UNITS> 
        <ADHOC_RPT_TIME /> 
        <ADHOC_RPT_UNITS>Days</ADHOC_RPT_UNITS> 
        <CIRCULATETO /> 
        <COMPLETION /> 
        <FOLLOWUP /> 
        <MSGSUBJECT /> 
        <OTHERFIELD /> 
        <PRIORITY>Low</PRIORITY> 
        <REQUEST /> 
        <RESPONSE /> 
        <Submit /> 
        <ADHOC_VALIDDATA>True</ADHOC_VALIDDATA> 
        <JFWF_TRANID>2xxyg9sffane7pwd5j8yv9t49s.1</JFWF_TRANID> 
        <JFWF_INSTRUCTION>Initiate a General Request. Fill the request form, then identify the next participant.</JFWF_INSTRUCTION> 
        <JFWF_TRANSPORT>HTTP</JFWF_TRANSPORT> 
        <JFWF_STATUS>RECEIVED</JFWF_STATUS> 
        <JFWF_ACTION /> 
        <JFWF_CHOICE>*Select Next Participant,Cancel</JFWF_CHOICE> 
        <JFWF_VERSION>6.2</JFWF_VERSION> 
        <JFWF_READONLY>1</JFWF_READONLY> 
        </data> 
       </xfa:DataGroup> 
      </xfa:Data> 
     </jfxpf:Content> 
     </jfxpf:Resource> 
    </jfxpf:Package> 
</jfxpf:XPF> 

Однако, у меня возникли проблемы с поиском текста, который вызывает эту проблему. Мой Java код ниже:

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder() 
        .parse(new InputSource(new StringReader(xml))); 

EDIT Удаление узла работы Data, так что ошибка где-то глубоко в XML. Это не бросает ошибку:

<?xml version=\"1.0\" encoding=\"UTF-8\"?> 
<?xfa generator=\"ff99v250_01\" APIVersion=\"1.4.3139.0\"?> 
<jfxpf:XPF xmlns:jfxpf=\"http://www.xfa.com/schema/xml-package\"> 
    <jfxpf:Package> 
     <jfxpf:Resource Location=\"GenReq\"> 
      <jfxpf:Link ContentType=\"application/x-jetform-cft\"/> 
     </jfxpf:Resource> 
     <jfxpf:Resource Location=\"default.xml\"> 
      <jfxpf:Content ContentType=\"text/xml\" Location=\"default.xml\"> 
      </jfxpf:Content> 
     </jfxpf:Resource> 
    </jfxpf:Package> 
</jfxpf:XPF> 

Мои Imports

import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.io.StringReader; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import javax.swing.JFileChooser; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.xml.sax.InputSource; 
+0

Так вы говорите, что XML вы писали работы, правильно? Ну, не видя XML, который не работает, что вы не опубликовали, трудно сказать. Но вы проверили, используя EBNF-грамматику XML в соответствии со http://www.w3.org/TR/REC-xml/, действительно ли ваша строка правильно сформирована? –

+0

Извините, это XML, который * не * работает. Мне удалось получить некоторые другие XML-работы, которые просто содержали простые вещи. Я проверил этот XML и не возвращался с какими-либо проблемами. – Jon

+0

Согласно [W3 Validator] (http://validator.w3.org/check), он действителен для XML. Возможно, пролог «xfa» не принят реализацией. –

ответ

1

документ и образец кода вы предоставили отлично работает в Java 1.8u25:

import static org.junit.Assert.*; 

import java.io.IOException; 
import java.io.StringReader; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 

import org.junit.Test; 
import org.w3c.dom.Document; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

public class FatalErrorTest 
{ 

    @Test 
    public void as_given() throws SAXException, IOException, ParserConfigurationException 
    { 
     String xml ="<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<?xfa generator=\"ff99v250_01\" APIVersion=\"1.4.3139.0\"?>\r\n<jfxpf:XPF xmlns:jfxpf=\"http://www.xfa.com/schema/xml-package\">\r\n <jfxpf:Package>\r\n  <jfxpf:Resource Location=\"GenReq\">\r\n   <jfxpf:Link ContentType=\"application/x-jetform-cft\" />\r\n  </jfxpf:Resource>\r\n  <jfxpf:Resource Location=\"default.xml\">\r\n   <jfxpf:Content ContentType=\"text/xml\" Location=\"default.xml\">\r\n   <xfa:Data xmlns:xfa=\"http://www.xfa.org/schema/xfa-data/1.0/\">\r\n    <xfa:DataGroup>\r\n     <data xmlns:xfe=\"http://www.xfa.org/schema/xfa-events/1.0\" xfe:script=\"$config.proto.common.template.uri='GenReq'\" xfe:event=\"$config:load\">\r\n      <?jetform ^Dat ^page 1?>\r\n      <FR_NAME>Administrator</FR_NAME>\r\n      <JFWF_DELEGATE />\r\n      <ADHOC_DLN_ACTOR />\r\n      <ADHOC_DLN_MSG />\r\n       <ADHOC_DLN_TIME />\r\n      <ADHOC_DLN_UNITS>Days</ADHOC_DLN_UNITS>\r\n      <ADHOC_RMD_MSG />\r\n      <ADHOC_RMD_TIME />\r\n      <ADHOC_RMD_UNITS>Days</ADHOC_RMD_UNITS>\r\n      <ADHOC_RPT_TIME />\r\n      <ADHOC_RPT_UNITS>Days</ADHOC_RPT_UNITS>\r\n      <CIRCULATETO />\r\n      <COMPLETION />\r\n      <FOLLOWUP />\r\n      <MSGSUBJECT />\r\n      <OTHERFIELD />\r\n      <PRIORITY>Low</PRIORITY>\r\n      <REQUEST />\r\n      <RESPONSE />\r\n      <Submit />\r\n      <ADHOC_VALIDDATA>True</ADHOC_VALIDDATA>\r\n      <JFWF_TRANID>2xxyg9sffane7pwd5j8yv9t49s.1</JFWF_TRANID>\r\n      <JFWF_INSTRUCTION>Initiate a General Request. Fill the request form, then identify the next participant.</JFWF_INSTRUCTION>\r\n      <JFWF_TRANSPORT>HTTP</JFWF_TRANSPORT>\r\n      <JFWF_STATUS>RECEIVED</JFWF_STATUS>\r\n      <JFWF_ACTION />\r\n      <JFWF_CHOICE>*Select Next Participant,Cancel</JFWF_CHOICE>\r\n      <JFWF_VERSION>6.2</JFWF_VERSION>\r\n      <JFWF_READONLY>1</JFWF_READONLY>\r\n     </data>\r\n    </xfa:DataGroup>\r\n   </xfa:Data>\r\n   </jfxpf:Content>\r\n  </jfxpf:Resource>\r\n </jfxpf:Package>\r\n</jfxpf:XPF>"; 
     Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder() 
       .parse(new InputSource(new StringReader(xml))); 
     assertNotNull(doc); 
    } 

} 
+0

Спасибо, это может повлиять на проблему. Однако после удаления этого блока текста он по-прежнему не работает одинаково. – Jon

+0

Я заменил свой код на ваш, и он все еще выдает ошибку. – Jon

+0

@ Jon Это интересно, тогда это должно быть касается импорта или версии Java. –

4

Моя догадка, что файл начинается с BOM символ U + FEFF: ошибка в строке 1, столбец 1.Это пространство с нулевой шириной, используемое иногда для обозначения файла как в некотором представлении Unicode, UTF-8, UTF-16LE, UTF-16BE.

Символ спецификации можно удалить. Проверьте размер файла, а затем посмотрите, какие у вас есть параметры: сохранить как UTF-8 без спецификации, удалить.

В Java (если редактор упрямиться):

Path path = Paths.get(".... .xml"); 
byte[] content = Files.readAllBytes(path); 
String s = new String(content, StandardCharsets.UTF_8); 
s = s.replaceFirst("^\uFEFF", ""); 
byte[] content2 = s.getBytes(StandardCharsets.UTF_8); 
if (content2.length != content.length) { 
    Files.write(path, content2); 
} 
+0

Спасибо, как бы добавить это в свой код? – Jon

+0

'xml = xml.replaceFirst ("^\ uFEFF "," ");' для удаления спецификации. _Не полностью уверен, является ли это причиной. –

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