Преждевременный конец файла. org.xml.sax.SAXParseException;Преждевременное завершение файла. [Фатальная ошибка]: -1: -1: - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь вставить некоторые элементы в henan-dishes.xml, Что я могу сделать, чтобы решить вопрос, который я поднял?

Я проверил xml, но не нашел ничего плохого!

package com.jerry.xmlwriter;

import com.jerry.common.XMLConfigUtils;
import com.jerry.common.XmlTag;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;

import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;

/**
 * DOM
 *
 * @author Jerry Hsu
 */
public class XmlWriterByDom {

    private static final XMLConfigUtils xmlConfig = XMLConfigUtils.getInstance();

    public void xmlInsert(Map<String, String> xmlNode, String xmlPath) {
        Document doc = xmlConfig.getDocument(xmlPath);
        Text nodeValue;

        Element root = doc.getDocumentElement();
        Element food = doc.createElement(XmlTag.FOOD);
        Element name = doc.createElement(XmlTag.NAME);
        Element price = doc.createElement(XmlTag.PRICE);
        Element desc = doc.createElement(XmlTag.DESC);

        nodeValue = doc.createTextNode(xmlNode.get(XmlTag.FOOD));
        name.appendChild(nodeValue);
        food.appendChild(name);

        nodeValue = doc.createTextNode(xmlNode.get(XmlTag.PRICE));
        price.appendChild(nodeValue);
        food.appendChild(price);

        nodeValue = doc.createTextNode(xmlNode.get(XmlTag.DESC));
        desc.appendChild(nodeValue);
        food.appendChild(desc);

        root.appendChild(food);

        try {
            xmlPath = Objects.requireNonNull(               this.getClass().getClassLoader().getResource(xmlPath)).getPath();
            TransformerFactory transformer = TransformerFactory.newInstance();
            Transformer trans = transformer.newTransformer();
            DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(new File(xmlPath).toURI().getPath());
            trans.transform(source, result);
        } catch (TransformerException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        Map<String, String> xmlNode = new HashMap<>(3);
        xmlNode.put("name", "tomato");
        xmlNode.put("price", "$10");
        xmlNode.put("description", "dishes");

        new XmlWriterByDom().xmlInsert(xmlNode, "xml/henan-dishes.xml");
    }
}

Ниже приводится содержание henan-dishes.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<menu>
    <food>
        <name>鱼香肉丝</name>
        <price>18¥</price>
        <description>经典川菜</description>
    </food>
    <food>
        <name>鲤鱼焙面</name>
        <price>59¥</price>
        <description>开封名菜</description>
    </food>
</menu>
  [Fatal Error] :-1:-1: Premature end of file.
org.xml.sax.SAXParseException; Premature end of file.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:205)
    at com.jerry.common.XMLConfigUtils.getDocument(XMLConfigUtils.java:57)
    at com.jerry.xmlwriter.XmlWriterByDom.xmlInsert(XmlWriterByDom.java:29)
    at com.jerry.xmlwriter.XmlWriterByDom.main(XmlWriterByDom.java:71)
Exception in thread "main" java.lang.NullPointerException
    at com.jerry.xmlwriter.XmlWriterByDom.xmlInsert(XmlWriterByDom.java:32)
    at com.jerry.xmlwriter.XmlWriterByDom.main(XmlWriterByDom.java:71)

1 Ответ

0 голосов
/ 21 октября 2019

Когда я пытаюсь удалить скомпилированную папку с именем target и выполнить заново, результат будет правильным. Может быть действительно проблема с файловой системой! Структура проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...