Неправильная ошибка корневого узла

Для проекта класса мы пытаемся подключиться к матрице расстояний Google и проанализировать некоторые данные из файла xml, но когда мы запускаем его, заполняем наши поля назначения и нажимаем следующий, он выдает следующую ошибку в консоли. Вот копия xml, из которого мы извлекаем, мы заменяем Чикаго на startLocation, а Майами на endDestination. Эти значения заполнены в предыдущем кадре, который не включен.

http://maps.googleapis.com/maps/api/distancematrix/xml?origins=chicago&destinations=Miami&language=en-EN&sensor=false&language=en-EN&units=imperial

[Фатальная ошибка]:1:2: разметка в документе, предшествующем корневому элементу, должна быть правильно сформирована. org.xml.sax.SAXParseException; номер строки: 1; columnNumber: 2; Разметка в документе, предшествующем корневому элементу, должна быть правильно сформирована. на com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(неизвестный источник) на com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(неизвестный источник) на edu.bsu.cs222, (GasCalculatorFrame.java:107) в javax.swing.AbstractButton.fireActionPerformed(Неизвестный источник) в javax.swing.AbstractButton$Handler.actionPerformed(Неизвестный источник) в javax.swing.DefaultButtonModel.fireActionPerversed.DefaultButtonModel.setPressed(неизвестный источник) в javax.swing.plaf.basic.BasicButtonListener.mouseReleased(неизвестный источник) в java.awt.Component.processMouseEvent(неизвестный источник) в javax.swing.JComponent.processMouseEvent(неизвестный источник).awt.Component.processEvent(неизвестный источник) на java.awt.Container.processEvent(неизвестный S ource) в java.awt.Component.dispatchEventImpl(неизвестный источник) в java.awt.Container.dispatchEventImpl(неизвестный источник) в java.awt.Component.dispatchEvent(неизвестный источник) в java.awt.LightweightDispatcher.ventargeMase на java.awt.LightweightDispatcher.processMouseEvent(неизвестный источник) на java.awt.LightweightDispatcher.dispatchEvent(неизвестный источник) на java.awt.Container.dispatchEventImpl(неизвестный источник) на java.awt.Window.dispatchEvent.awt.Component.dispatchEvent (неизвестный источник) в java.awt.EventQueue.dispatchEventImpl(неизвестный источник) в java.awt.EventQueue.access$200(неизвестный источник) в java.awt.EventQueue$3.run(неизвестный источник) в java.awt.EventQueue$3.run(неизвестный источник) на java.security.AccessController.doPrivileged(собственный метод) на java.security.ProtectionDomain$1.doIntersectionPrivilege(неизвестный источник) на java.security.ProtectionDomain$1.doIntersectionPrivilege(неизвестный источник) java.awt.EventQueue$4.run(неизвестный источник) на java.awt.EventQueue$4.run(неизвестный источник) в java.security.AccessController.doPrivileged(собственный метод) в java.security.ProtectionDomain$1.doIntersectionPrivilege(неизвестный источник) в java.awt.EventQueue.dispatchEvent(неизвестный источник) в java.EventDispatchThread.pumpOneEventForFilters(Unknown Source) на java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) в java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) в java.awt.EventDispatchThread.pumpEvents(Unknown Source) в java.awt.EventDispatchThread.pumpEvents (Неизвестный источник) на java.awt.EventDispatchThread.run(Неизвестный источник)

public class GoogleDistanceMatrixConnection
{
String startLocation;
String endLocation;
final String urlString = "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" + startLocation +"&destinations=" + endLocation +"&language=en-EN&sensor=false&language=en-EN&units=imperial";


private static String XMLFile;

public String makeXMLFile(String start, String end) throws IOException
{
    startLocation = start;
    endLocation = end;
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    connection.connect();

    BufferedReader reader = new BufferedReader( new InputStreamReader(
            connection.getInputStream()));

    for(String line = reader.readLine(); line != null; line = 
            reader.readLine())
    {
        setXMLFile(line);
    }
    return getXMLFile();
}

public static String getXMLFile() {
    return XMLFile;
}
public static void setXMLFile(String xMLFile) {
    XMLFile = xMLFile;
}

public boolean doesPageExist() {
    if(XMLFile == null)
        return true;
    else    
        return false;
}
}

public class GoogleXMLParser {

private Document document;

@Before
public void setUp(String start, String end) throws ParserConfigurationException, SAXException,
        IOException {
    InputSource source = createInputSourceFromSampleXMLData(start, end);
    document = parseXMLFrom(source);
}

private InputSource createInputSourceFromSampleXMLData(String start, String end) {
    GoogleDistanceMatrixConnection googleConnection = new GoogleDistanceMatrixConnection();

    String xmlFile = "";
    try {
        xmlFile = googleConnection.makeXMLFile(start, end);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    StringReader stringReader = new StringReader(xmlFile);
    return new InputSource(stringReader);
}

private Document parseXMLFrom(InputSource source)
        throws ParserConfigurationException, SAXException, IOException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder documentBuilder = factory.newDocumentBuilder();
    return documentBuilder.parse(source);
}

public String retrieveDistance() throws ParserConfigurationException,
        SAXException, IOException {
    String distanceChildNodeName = document.getFirstChild().getChildNodes()
            .item(3).getFirstChild().getChildNodes().item(2)
            .getChildNodes().item(1).getFirstChild().getTextContent();
    return distanceChildNodeName;
}

public String retrieveDuration() throws ParserConfigurationException,
        SAXException, IOException {
    String durationChildNodeValue = document.getFirstChild()
            .getChildNodes().item(3).getFirstChild().getChildNodes()
            .item(1).getChildNodes().item(1).getFirstChild()
            .getTextContent();
    return durationChildNodeValue;
}
}

1 ответ

public String makeXMLFile(String start, String end) throws IOException
{
    startLocation = start;
    endLocation = end;
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    connection.connect();

    BufferedReader reader = new BufferedReader( new InputStreamReader(
            connection.getInputStream()));

    for(String line = reader.readLine(); line != null; line = 
            reader.readLine())
    {
        setXMLFile(line);
    }
    return getXMLFile();
}

public static String getXMLFile() {
    return XMLFile;
}
public static void setXMLFile(String xMLFile) {
    XMLFile = xMLFile;
}

Вы переопределяете XMLFile с каждой строкой -> вы получаете последнюю строку вместо всего содержимого. Вы можете использовать StringBuilder для добавления строк.

Другие вопросы по тегам