2009-06-16 6 views
1

J'ai le code suivant:Erreur dans mon fichier XML?

public class DeserializeAndCompare 
{ 
    public static List<string> IntoXML() 
    { 
     List<string> PopList = new List<string>(); 

     XmlSerializer serializer = new XmlSerializer(PopList.GetType()); 
     string k = FileToolBox.position0; 
     FileStream filestreamer = new FileStream(k.ToString(), FileMode.Open); 
     PopList = (List<string>)serializer.Deserialize(filestreamer); 
     filestreamer.Close(); 
     return PopList; 

    } 
} 

Je continue à frapper une erreur avec la ligne: PopList = (Liste) serializer.Deserialize (filestreamer);

L'erreur: InvalidOperationException n'a pas été gérée. Il y a une erreur dans le document XML (1,1).

Dans cette ligne: FileStream filestreamer = new FileStream (k, FileMode.open);

J'essaye de référencer la 0ème position d'un tableau qui contient des chaînes. Je vais essentiellement à travers mon répertoire, trouver tous les fichiers avec une extension .xml et en maintenant les chemins de fichier dans un tableau.
Voici le code de mon tableau:

public static class FileToolBox 
{ 

    public static string position0; 
    public static void FileSearch() 
    { 



     //string position0; 

     //array holding XML file names 
     string[] array1 = Directory.GetFiles(@"s:\project", "*.xml"); 

     Array.Sort(array1); 
     Array.Reverse(array1); 
     Console.WriteLine("Files:"); 
     foreach (string fileName in array1) 
     { 

      Console.WriteLine(fileName); 

     } 

     position0 = array1[0]; 

    } 

    public static string Position0 
    { 
    get 
     { 
      return position0; 
     } 
     set 
     { 
      position0 = value; 
     } 

    } 
    } 

Suis-je raté quelque chose? Comment puis-je me débarrasser de cette erreur?

Merci d'avance pour l'aide.

+0

ah merci à tous! c'était en effet une erreur avec mon fichier XML réel ... je n'arrive pas à croire que je n'ai pas compris ça au début>< – yeahumok

Répondre

3

Votre fichier XML n'est pas bien formé, utilisez un outil comme XML Spy, XML Notepad ou ouvrez-le dans IE et il vous donnera l'erreur et la ligne sur laquelle il se trouve. Vous avez probablement des caractères non valides comme & quelque part dans le fichier

1

Cette erreur indique spécifiquement que le fichier XML en cours de lecture est mal formé. Vous devriez commencer par poster votre XML. En outre, essayez d'ouvrir le fichier XML dans Firefox, car il peut également signaler le problème avec XML.

1

Votre document xml n'est pas bien formé, vous devez ouvrir votre fichier XML et l'analyser.

Il existe plusieurs validateurs xml sur le Web, mais en voici un de w3schools.

0

Donnez ce un coup:

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Text; 
using System.Xml; 
using System.Xml.Serialization; 

namespace Util 
{ 
    /// <summary> 
    /// Not to be confused with System.Xml.Serialization.XmlSerializer, which this uses internally. 
    /// 
    /// This will convert the public fields and properties of any object to and from an XML string, 
    /// unless they are marked with NonSerialized() and XmlIgnore() attributes. 
    /// </summary> 
    public class XMLSerializer 
    { 
     public static Byte[] GetByteArrayFromEncoding(Encoding encoding, string xmlString) 
     { 
      return encoding.GetBytes(xmlString); 
     } 

     public static String SerializeToXML<T>(T objectToSerialize) 
     { 
      return SerializeToXML(objectToSerialize, Encoding.UTF8); 
     } 

     public static String SerializeToXML<T>(T objectToSerialize, Encoding encoding) 
     { 
      StringBuilder sb = new StringBuilder(); 

      XmlWriterSettings settings = 
       new XmlWriterSettings { Encoding = encoding, Indent = true }; 

      using (XmlWriter xmlWriter = XmlWriter.Create(sb, settings)) 
      { 
       if (xmlWriter != null) 
       { 
        new XmlSerializer(typeof (T)).Serialize(xmlWriter, objectToSerialize); 
       } 
      } 

      return sb.ToString(); 
     } 

     public static void DeserializeFromXML<T>(string xmlString, out T deserializedObject) where T : class 
     { 
      DeserializeFromXML(xmlString, new UTF8Encoding(), out deserializedObject); 
     } 

     public static void DeserializeFromXML<T>(string xmlString, Encoding encoding, out T deserializedObject) where T : class 
     { 
      XmlSerializer xs = new XmlSerializer(typeof(T)); 

      using (MemoryStream memoryStream = new MemoryStream(GetByteArrayFromEncoding(encoding, xmlString))) 
      { 
       deserializedObject = xs.Deserialize(memoryStream) as T; 
      } 
     } 
    } 
} 


public static void Main() 
{ 
    List<string> PopList = new List<string>{"asdfasdfasdflj", "asdflkjasdflkjasdf", "bljkzxcoiuv", "qweoiuslfj"}; 

    string xmlString = Util.XMLSerializer.SerializeToXML(PopList); 

    XmlDocument xmlDoc = new XmlDocument(); 
    xmlDoc.LoadXml(xmlString); 

    string fileName = @"C:\temp\test.xml"; 
    xmlDoc.Save(fileName); 

    string xmlTextFromFile = File.ReadAllText(fileName); 

    List<string> ListFromFile; 

    Util.XMLSerializer.DeserializeFromXML(xmlTextFromFile, Encoding.Unicode, out ListFromFile); 

    foreach(string s in ListFromFile) 
    { 
     Console.WriteLine(s); 
    } 
} 

Vérifiez le fichier XML de sortie et voir ce que l'encodage est, et les comparer à ce que vous encodant essayez pour lire dedans. J'ai été attrapé avec ce problème avant parce que j'utilise un StringBuilder pour sortir la chaîne XML, qui écrit en UTF-16, mais j'essayais de lire en UTF-8. Essayez d'utiliser Encoding.Unicode et voyez si cela fonctionne pour vous.

0

Votre code ne fonctionne qu'avec des fichiers XML qui ont la structure suivante ...

<?xml version="1.0" encoding="utf-16"?> 
<ArrayOfString xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <string>Hello</string> 
    <string>World</string> 
</ArrayOfString> 
Questions connexes