El analizador XML de Java parece estar pensando que mi documento XML no está bien formado siguiendo el elemento raíz. Pero lo he validado con varias herramientas y todos están en desacuerdo. Probablemente sea un error en mi código en lugar de en el documento en sí. Realmente agradecería cualquier ayuda que pudieran ofrecerme.Java diciendo que el documento XML no está bien formado
Aquí es mi método Java:
private void loadFromXMLFile(File f) throws ParserConfigurationException, IOException, SAXException {
File file = f;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db;
Document doc = null;
db = dbf.newDocumentBuilder();
doc = db.parse(file);
doc.getDocumentElement().normalize();
String desc = "";
String due = "";
String comment = "";
NodeList tasksList = doc.getElementsByTagName("task");
for (int i = 0; i tasksList.getLength(); i++) {
NodeList attributes = tasksList.item(i).getChildNodes();
for (int j = 0; i < attributes.getLength(); j++) {
Node attribute = attributes.item(i);
if (attribute.getNodeName() == "description") {
desc = attribute.getTextContent();
}
if (attribute.getNodeName() == "due") {
due = attribute.getTextContent();
}
if (attribute.getNodeName() == "comment") {
comment = attribute.getTextContent();
}
tasks.add(new Task(desc, due, comment));
}
desc = "";
due = "";
comment = "";
}
}
El siguiente es el archivo XML que estoy tratando de carga:
<?xml version="1.0"?>
<tasklist>
<task>
<description>Task 1</description>
<due>Due date 1</due>
<comment>Comment 1</comment>
<completed>false</completed>
</task>
<task>
<description>Task 2</description>
<due>Due date 2</due>
<comment>Comment 2</comment>
<completed>false</completed>
</task>
<task>
<description>Task 3</description>
<due>Due date 3</due>
<comment>Comment 3</comment>
<completed>true</completed>
</task>
</tasklist>
Y aquí está el mensaje de error de Java está lanzando para mí:
run:
[Fatal Error] tasks.xml:28:3: The markup in the document following the root element must be well-formed.
May 17, 2010 6:07:02 PM todolist.TodoListGUI <init>
SEVERE: null
org.xml.sax.SAXParseException: The markup in the document following the root element must be well-formed.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:239)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
at todolist.TodoListGUI.loadFromXMLFile(TodoListGUI.java:199)
at todolist.TodoListGUI.<init>(TodoListGUI.java:42)
at todolist.Main.main(Main.java:25)
BUILD SUCCESSFUL (total time: 19 seconds)
Para TodoListGUI.java:199 referencia es
doc = db.parse(file);
Si el contexto es útil para cualquier persona aquí, estoy tratando de escribir una aplicación GUI simple para administrar una lista de tareas pendientes que puede leer y escribir en y desde archivos XML que definen las tareas.
¿Puedes publicar un documento XML de muestra? –
Sus etiquetas XML parecen haberse comido. ¿Podría editarlas para que sean visibles? Debería poder obtener un '<' con '' < ''. – psmears
@psmears: no, simplemente sangría con 4 espacios o seleccione el código y luego presione el botón '010101' en la barra de herramientas del editor o la tecla' Ctrl + K'. – BalusC