2012-07-27 3 views
0

Pourquoi je reçois toujours cette erreur.J'essaie d'ajouter des données au fichier xml existant.J'ai lu here la réponse et essayé ce qui a été suggéré. Mais toujours pas de succès.Je sais que cette erreur signifie que l'élément racine supérieure peut seulement venir une fois.Mais pourquoi je reçois cette erreur, je ne sais pas.Android seul un élément racine est allowd. Erreur Xml

Ce sera la structure de mon fichier xml.

<root> 
    <ip>ip1</ip> 
    <ip>ip2</ip> 
</root> 

Et la balise ip va continuer à augmenter.Voici comment j'essaye de lire et ajouter des données au fichier existant.

private void UpdateExistingXML(String ip,File file) 
{ 
    try 
    { 
     DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder docBuilder = docFactory.newDocumentBuilder(); 
     Document doc = docBuilder.parse(file.toURI().toString()); // <--error here 

     // Get the root element 
     Node root= doc.getFirstChild(); 
     org.w3c.dom.Element newip=doc.createElement("ip"); 
     newip.appendChild(doc.createTextNode(ip)); 
     root.appendChild(newip); 
     TransformerFactory transformerFactory = TransformerFactory.newInstance(); 
     Transformer transformer = transformerFactory.newTransformer(); 
     DOMSource source = new DOMSource(doc); 
     StreamResult result = new StreamResult(file); 
     transformer.transform(source, result); 
    } 
    catch (ParserConfigurationException pce) 
    { 
      pce.printStackTrace(); 
    } 
    catch (TransformerException tfe) 
    { 
      tfe.printStackTrace(); 
    } 
    catch (IOException ioe) 
    { 
      ioe.printStackTrace(); 
    } 
    catch (SAXException sae) 
    { 
      sae.printStackTrace(); 
    } 
    catch (Exception e) 
    { 
     Log.e("eeee",e.getMessage()); 
    } 
} 

Voici comment je crée le fichier xml pour la première fois, montrant que l'élément racine n'est inséré qu'une seule fois.

private void CreateNewXML(String ip) throws FileNotFoundException 
{ 
    FileOutputStream fos=null ; 

    Log.i("Fileeee","new"); 
    try 
    { 
     fos = openFileOutput("clients.xml", Context.MODE_PRIVATE); 
    } 
    catch(FileNotFoundException e) 
    { 
      Log.e("FileNotFoundException", "can't create FileOutputStream"); 
    } 
    XmlSerializer serializer = Xml.newSerializer(); 
    try { 
        serializer.setOutput(fos, "UTF-8"); 
        serializer.startDocument(null, Boolean.valueOf(true)); 
        serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 
        serializer.startTag(null, "root"); 

          serializer.startTag(null, "ip"); 
          serializer.text(ip); 
          serializer.endTag(null, "ip"); 

        serializer.endTag(null, "root"); 
        serializer.endDocument(); 
        serializer.flush(); 
        fos.close(); 

      } 
    catch (Exception e) 
    { 
        Log.e("Exceptionhaiiiiiiiiiii",e.getMessage()); 
    } 
} 
+0

Pouvez-vous poster le journal des erreurs et/ou logcat – BlackHatSamurai

Répondre

0

Cela ressemble à votre problème:

Document doc = docBuilder.parse(file.toURI().toString()); // <--error here 

Vous essayez d'analyser le chemin du fichier, plutôt que le fichier. Vous devez créer un inputStream et analyser cela.

Si vous obtenez le fichier à partir d'un serveur web, il pourrait ressembler à ceci:

URL url = new URL(DATAURL); 
      conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(TIMEOUT); 
      conn.setConnectTimeout(CONNECT_TIMEOUT); 
      conn.setRequestMethod("GET"); 
      conn.setDoInput(true); 
      conn.connect(); 

DocumentBuilderFactory builderFactory = 
      DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = null; 

     try 
     { 

      builder = builderFactory.newDocumentBuilder(); 
     } 
     catch (ParserConfigurationException e) 
     { 
      Log.e(TAG, "Parse Configuration issue", e); 
      throw new ServiceException("Service Exception Error"); 
     } 
     catch (IllegalAccessError e) 
     { 
      Log.e(TAG, "Illegal Accessor Error", e); 
      throw new ServiceException("Service Exception Error"); 
     } 

     try 
     { 
      // parse input from server 
      Document document = builder.parse(conn.getInputStream()); 
      Element xmlElement = document.getDocumentElement(); 
      NodeList recordNodes = xmlElement.getChildNodes(); 

      // assign parsed data to listItem object 
      for (int i = 0; i < recordNodes.getLength(); i++) 
      { 

       Node record = recordNodes.item(i); 
       NodeList recordDetails = record.getChildNodes(); 
       ListData listItem = new ListData(); 

       for (int ii = 0; ii < recordDetails.getLength(); ii++) 
       { 
        Node detailItem = recordDetails.item(ii); 
        String detailType = detailItem.getNodeName(); 
        String detailValue = detailItem.getTextContent(); 
..... 
Questions connexes