2009-06-16 3 views
1

나는 한 다음 코드 : 나는 라인에 오류 타격 유지내 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; 

    } 
} 

: PopList = (목록) serializer.Deserialize (filestreamer를);

오류 : InvalidOperationException 처리되지 않았습니다. XML 문서 (1,1)에 오류가 있습니다.

이 행의 내용 : FileStream filestreamer = new FileStream (k, FileMode.open);

문자열을 보유하고있는 배열의 0 번째 위치를 참조하려고합니다. 기본적으로 .xml 확장명을 가진 파일을 찾고 배열에 파일 이름 경로를 보유하고 내 디렉토리를 통해 갈거야.

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; 
     } 

    } 
    } 

내가 여기서 뭔가를 놓치고 있습니까 :
여기 내 배열에 대한 코드? 이 오류를 제거하려면 어떻게해야합니까?

도움을 미리 감사드립니다.

+0

아 여러분 모두 감사합니다! 그것은 실제로 내 실제 XML 파일의 오류였습니다 ... 나는 그걸 처음 잡아 내지 않았다는 것을 믿을 수 없습니다. << – yeahumok

답변

3

XML 파일이 잘 형성되지 않았습니다. XML Spy, XML 메모장 같은 도구를 사용하거나 IE에서 열면 오류 및 줄이 표시됩니다. 노력하고 무엇을 인코딩

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); 
    } 
} 

가 출력 XML 파일을 확인하고 인코딩이 무엇인지 확인하고 해당 비교 : 당신은 가장 가능성

1

이 오류는 특히 읽는 XML 파일의 형식이 잘못되었음을 나타냅니다. 먼저 XML을 게시해야합니다. 또한 XML 문제를 지적 할 수 있기 때문에 Firefox에서 XML을 열어보십시오.

1

XML 문서가 제대로 구성되지 않았으므로 XML 파일을 열어 분석해야합니다.

웹에 여러 개의 XML 유효성 검사기가 있지만 여기에는 w3schools의 유효성 검사기가 있습니다.

0

이 주사를 파일에 & 어딘가에 같은 잘못된 문자가 있습니다 내가 UTF-16으로 쓰는 XML 문자열을 출력하기 위해 StringBuilder를 사용하기 때문에이 문제가 발생했습니다.하지만 UTF-8로 읽으려고했습니다. Encoding.Unicode를 사용해 보시고 효과가 있는지보십시오. 단지 다음과 같은 구조를 XML 파일로 작업을

0

귀하의 코드 ...

<?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>