2013-11-26 4 views
0

내 XML 파일을 개체 목록으로 변환하려고합니다.xml을 개체로 구문 분석

private void ReadChangelog() 
    { 
     XmlSerializer serializer = new XmlSerializer(typeof(Changelog)); 
     Changelog changelog = (Changelog)serializer.Deserialize(new StringReader("changelog.xml")); 

     foreach (Release release in changelog.Releases) 
     { 
      string version = release.Version; 
      string date = release.Date; 
      string changes = release.Changes; 
     } 
    } 

이 내 변경 로그 클래스

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

[XmlRoot()] 
public class Changelog 
{ 
    private Release[] releases; 

    public Release[] Releases 
    { 
     get { return releases; } 
     set { releases = value; } 
    } 
} 

public class Release 
{ 
    private string version; 
    private string date; 
    private string changes; 

    [XmlAttribute] 
    public string Version 
    { 
     get { return version; } 
     set { version = value; } 
    } 

    [XmlAttribute] 
    public string Date 
    { 
     get { return date; } 
     set { date = value; } 
    } 

    [XmlAttribute] 
    public string Changes 
    { 
     get { return changes; } 
     set { changes = value; } 
    } 
} 

입니다 그리고 이것은 내 XML

<?xml version="1.0" encoding="utf-8" ?> 
<Changelog> 
    <Releases> 
    <Release> 
     <Version>1511</Version> 
     <Date>25-11-2013</Date> 
     <Changes> 
     qzdqzdqzdqzdzdzzqefrsrgsrg 
     </Changes> 
    </Release> 
    <Release> 
     <Version>1510</Version> 
     <Date>25-11-2013</Date> 
     <Changes> 
     Blabqzdzqdqzdqzd 
     </Changes> 
    </Release> 
    <Release> 
    </Releases> 
</Changelog> 

입니다하지만이를 실행하려고 할 때 오류를

InvalidOperationException이 얻을, XML 문서 (1,1)에 오류가 있습니다.

내가 뭘 잘못하고 있니?

+0

http://www.w3schools.com/xml/xml_validator.asp XML의 유효성을 검사 해 보셨습니까? – Marc

+1

마지막 'Release'가 더 가까워 야합니까? – Sico

+0

보유하고있는 XML이 "요소"를 사용하여 버전, 날짜 및 변경 데이터를 제공 할 때 XmlAttribute를 사용하여 속성을 꾸미 셨습니다. 데이터를 "Release"요소의 "속성"으로 설정하거나, Release 클래스를 정의하는 방법을 변경하려면 XML을 변경하십시오. –

답변

4

new StringReader("changelog.xml")은 changelog.xml의 내용에서 읽지 않습니다. 대신이 코드는 문자 'changelog.xml'문자열을 역 직렬화하려고합니다. 내 생각에 너는 new StreamReader("changelog.xml")과 같은 것을 원한다고 생각한다.

1

StringReader은 지정된 경로가있는 파일이 아니라 문자열 내용으로 stream을 만듭니다. 사용자 StreamReader 대신.

Changelog changelog = (Changelog)serializer.Deserialize(new StreamReader("changelog.xml")); 

는에도 불구하고, 코드에 더 많은 부부 오류가 :

  1. 귀하의 문서 요소를 사용하고 클래스 선언 XmlAttributeAttribute를 사용합니다. 그것은 함께 작동하지 않습니다.
  2. 문서가 올바른 XML 문서가 아닙니다. 그것은 닫히지 않은 몇 가지 요소를 가지고 있습니다.