Преждевременное завершение файла. Как решить? XML - PullRequest
0 голосов
/ 01 ноября 2018

Некоторое время я перечитывал эту ошибку SAXParseException и пытался ее исправить, но безуспешно.

[Fatal Error] schedule.xml:1:1: Premature end of file. 
org.xml.sax.SAXParseException; systemId: file:/U:/schedule.xml; lineNumber: 1; columnNumber: 1; Premature end of file.
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at package.DOMclass.importDocument(DOMclass.java:681) //<---.parse(new File(fileToImport));
    ...

Я читал, как это может быть используемый поток пуст (или читаемый файл XML пуст), а также его нельзя использовать повторно? Также проблема чтения и записи обратно в один файл. Вот ссылка , которая объясняет это, но я все еще не понимаю.

Кроме того, еще одна возможность может заключаться в том, что мой xml искажен / неверен, но я просмотрел его и все хорошо, теги хороши, и я закодировал его в UTF-8 (без спецификации) в Notepad ++, поскольку некоторые В сообщениях говорилось, что перед объявлением XML могут быть скрытые пробелы, но, опять же, безуспешно.

Это мое чтение в коде

public TestClass(){
   Node root = DOMclass.importDocument("U:\\schedule.xml");
   ... read nodes, attribute values, etc..
}

public static Document importDocument(String fileToImport)
   {
      Document document = null;
      try
      {
         document = DocumentBuilderFactory.newInstance().newDocumentBuilder()
            .parse(new File(fileToImport));  //<--- where the error is at 
         //Do I need a Reader here? to close?

      }
      catch(SAXException saxe)
      {
         saxe.printStackTrace();
      }
      catch(IOException ioe)
      {
         ioe.printStackTrace();
      }
      catch(ParserConfigurationException pce)
      {
         pce.printStackTrace();
      }  
      return document;
   }

Это мое письмо.

public static void addNode(String name, String lastName,...){
    String filepath = "U;\\schedule.xml";
    DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder docBuilder;

    try {
            docBuilder = docFactory.newDocumentBuilder();
            Document doc = docBuilder.parse(filepath);
...
... make/traverse xml nodes, elements, appending
...
}
DOMUtils.exportDocument(doc, filepath);

    } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } 
    }

public static void exportDocument(Document documentToExport, String fileName)
   {
      Transformer transformer = null;
      DOMSource domSource = null;
      StreamResult streamResult = null;
      try
      {
         BufferedWriter out = new BufferedWriter(new FileWriter(fileName));
         transformer = TransformerFactory.newInstance().newTransformer();
         domSource = new DOMSource(documentToExport);
         streamResult = new StreamResult(out);

         System.out.println("\nStream Result: " + streamResult);

         transformer.transform(domSource, streamResult); 
         out.close();
      }
      catch (IOException e)
      {
         e.printStackTrace();
      } 
      catch(TransformerException e)
      {
         e.printStackTrace();
      }       
      finally
      {
         transformer = null;
         domSource = null;
         streamResult = null;         
      }
   } 
}

Есть мысли? Спасибо.

...