Java disant Document XML n'est Pas Bien Formé
Java XML parser semble être en train de penser que mon document XML n'est pas bien formé suivant l'élément racine. Mais j'ai validé avec plusieurs outils et ils sont tous en désaccord. C'est probablement une erreur dans mon code, plutôt que dans le document lui-même. Je serais vraiment reconnaissant de toute aide que vous tous pourraient m'offrir.
Voici ma méthode en 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 = "";
}
}
Voici le fichier XML, je suis en train de charger:
<?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>
Et voici le message d'erreur java est à jeter pour moi:
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)
De référence TodoListGUI.java:199 est
doc = db.parse(file);
Si le contexte est utile à tout le monde ici, je suis en train d'écrire une simple application de l'interface utilisateur de gérer une liste de choses à faire qui peut lire et écrire et à partir de fichiers XML de la définition des tâches.
Vos balises XML semblent avoir été mangé - pourriez-vous modifier afin de les rendre visibles? Vous devriez être en mesure d'obtenir un
<
avec"<
'.non, juste tiret avec 4 espaces ou sélectionnez le code, puis appuyez sur
010101
bouton dans l'éditeur de barre d'outils ou le Ctrl+K
clé.Êtes-vous sûr que l'entrée est ce que vous attendez ?
OriginalL'auteur Pyroclastic | 2010-05-17
Vous devez vous connecter pour publier un commentaire.
Cette exception particulière indique qu'il y a plus d'un élément racine du document XML. En d'autres termes, la
<tasklist>
n'est pas le seul élément racine. Pour prendre votre document XML comme un exemple, penser l'un sans l'<tasklist>
élément et avec trois<task>
éléments à la racine. Ce serait l'origine de ce type d'exception.Depuis le fichier XML que vous avez posté l'air bien, le problème est ailleurs. Il regarde comme ça c'est pas de l'analyse du fichier XML que vous attendez que c'est de l'analyse. Pour une mise au point rapide, ajoutez le code suivant en haut de votre méthode:
Localiser le fichier dans le système de fichier du disque et de le vérifier.
OriginalL'auteur BalusC
Je pense qu'il y a peut être quelque chose de mal avec la taille réelle du fichier. Quand je copie ton code, mais l'utilisation de XML comme une chaîne de caractères d'entrée de l'analyseur, il fonctionne très bien (après la fixation d'un couple de questions -
attributes.item(i)
devrait êtreattributes.item(j)
et vous avez besoin de sortir de la boucle quandattribute == null
).En train d'essayer de reproduire ton erreur, je peux obtenir le même message si j'ajoute un autre
<tasklist></tasklist>
élément. C'est parce que le XML n'a plus qu'un seul élément racine (liste des tâches). Est-ce le problème que vous rencontrez? Le XML danstasks.xml
ont qu'un seul élément racine?OriginalL'auteur laz
Essayez de modifier votre déclaration XML:
Et je ne fais que le
encoding
suggestion parce que, autant que je peux dire et de test, vous déjà un document XML bien formé ... peut-être il y a quelque chose d'autre se passe dans votre code.Je n'ai rien d'essayer. C'est encore de me donner la même erreur avec ou sans le type de codage.
OriginalL'auteur EAMann
Pour ce que ça vaut, de la Scala REPL analysée avec succès votre balisage.
OriginalL'auteur ewg
L'autre pour ce que sa vaut le coup, voici ce que j'obtiens quand j'xml sauvegardé dans un fichier appelé
test.xml
et il a couru thru xmllint.semble aller pour le mieux. vous avez probablement quelques caractères que vous ne pouvez pas voir là quelque part dans votre fichier. Essayez d'afficher le fichier dans un éditeur de texte qui permettra d'afficher les caractères non imprimables, comme quelqu'un d'autre a suggéré si ce n'est pas un anglais UTF-8 machine, vous risquez d'avoir des caractères Unicode que vous ne pouvez pas voir que l'analyseur ne. Que ou vous n'êtes pas à charger le fichier que vous pensez de vous. Débogage pas à pas et voir ce que le véritable contenu du fichier avant qu'il soit introduit dans l'analyseur.
OriginalL'auteur
Êtes-vous sûr que c'est tout le contenu de ce fichier? L'erreur est de se plaindre qu'il y a plus de balisage après la racine. Donc il doit y avoir quelque chose d'autre après
</tasklist>
.Parfois, cette erreur peut être causée par des caractères non-imprimables. Si vous ne voyez pas de quoi que ce soit, faire un convertir le fichier.
OriginalL'auteur ZZ Coder