2011-12-23 4 views
3

나는 이것이 어리석은 간단한 질문처럼 보일 것이라는 것을 알고 있습니다. 그러나 나는 어쨌든 그것을 묻습니다. 나는이 XML 파일을 읽을 것을 시도하고있다 : 나는 위의 읽기이 코드를 사용하고간단한 xml 파일을 읽을 수 없습니다.

<Songs> 
<song> 
    <TrackID>1666</TrackID> 
    <Name>What's the Matter Here?</Name> 
    <Artist>10,000 Maniacs</Artist> 
    <AlbumArtist>10,000 Maniacs</AlbumArtist> 
    <Composer>Natalie Merchant/Robert Buck</Composer> 
    <Album>In My Tribe</Album> 
    <Genre>Rock</Genre> 
    <Kind>MPEG audio file</Kind> 
    <Size>9318485</Size> 
    <TotalTime>291134</TotalTime> 
    <TrackNumber>1</TrackNumber> 
    <Year>1987</Year> 
    <DateModified>2005-03-09T07:31:09Z</DateModified> 
    <DateAdded>2007-07-20T17:21:36Z</DateAdded> 
    <BitRate>256</BitRate> 
    <SampleRate>44100</SampleRate> 
    <Comments> </Comments> 
    <PersistentID>54F22391EB807F38</PersistentID> 
    <TrackType>File</TrackType> 
    <Location></Location>  
</song> 
<song> 
    <TrackID>1666</TrackID> 
    <Name>What's the Matter Here?</Name> 
    <Artist>10,000 Maniacs</Artist> 
    <AlbumArtist>10,000 Maniacs</AlbumArtist> 
    <Composer>Natalie Merchant/Robert Buck</Composer> 
    <Album>In My Tribe</Album> 
    <Genre>Rock</Genre> 
    <Kind>MPEG audio file</Kind> 
    <Size>9318485</Size> 
    <TotalTime>291134</TotalTime> 
    <TrackNumber>1</TrackNumber> 
    <Year>1987</Year> 
    <DateModified>2005-03-09T07:31:09Z</DateModified> 
    <DateAdded>2007-07-20T17:21:36Z</DateAdded> 
    <BitRate>256</BitRate> 
    <SampleRate>44100</SampleRate> 
    <Comments> </Comments> 
    <PersistentID>54F22391EB807F38</PersistentID> 
    <TrackType>File</TrackType> 
    <Location></Location>  
</song> 
</Songs> 

: 독자가 단지 null를 돌려처럼

private static void LoadSongsFromITunes(string xmlFile) 
    { 
     XmlReaderSettings settings = new XmlReaderSettings(); 
     settings.IgnoreComments = true; 
     settings.IgnoreWhitespace = true; 
     string album=null ; 
     string artists=null ; 
     string genres=null ; 
     string year=null ; 
     string duration=null ; 

     try 
     { 
      using (XmlReader reader = XmlReader.Create(xmlFile, settings)) 
      { 
       string xmlContent; 

       while (reader.Read()) 
       { 
        if (reader.NodeType != XmlNodeType.Element) continue; 
        xmlContent = ""; 
        string name=null; 
        if (reader.Name == "Name") 
        { 
         name = reader.ReadString().ToString(); 
        } 
        if (reader.Name == "Artist") 
        { 
         artists = reader.ReadString().ToString(); 
        } 
        if (reader.Name == "Album") 
        { 
         album = reader.ReadString().ToString(); 
        } 
        if (reader.Name == "Genre") 
        { 
         genres = reader.ReadString().ToString(); 
        } 
        if (reader.Name == "Year") 
        { 
         year = reader.ReadString(); 
        } 
        if (reader.Name == "Duration") 
        { 
         duration = reader.ReadString().ToString(); 
        } 
        Console.WriteLine(name); 
       } 
      } 
     } 
     catch 
     { 

     } 

그러나, 그것은 보인다. 디버거를 통해 코드를 밟았지만이 코드에 무엇이 잘못되었는지 알 수 없습니다. P .: 누군가가 더 나은 방법을 제공 할 수 있습니까? xml 또는 뭔가에 대한 링크를 사용하는 것처럼? XML에

+0

가 BTW, 나는이 느낌이 작업을 수행하는 가장 좋은 방법은 아닙니다. 누군가가 이것을 읽을 수있는 더 좋은 방법을 제안 할 수 있습니까? –

+0

테스트를 거쳤으며 코드가 작동하는 것 같습니다. – dotnetstep

+0

목표는 무엇입니까? – dotnetstep

답변

6

LINQ :

var doc = XDocument.Parse(xml); 

var result = doc 
    .Root.Elements("song") 
    .Select(e => 
     new { Name = (string)e.Element("Name"), Artist = (string)e.Element("Artist") }); 

foreach (var val in result) 
{ 
    Console.WriteLine(val); 
} 
+0

잘 모르겠지만 무엇이 잘못되었지만이 예외가 발생합니다. 처리되지 않은 예외 : System.Xml.XmlException : Data at 루트 레벨이 유효하지 않습니다. 시스템에서 System.Xml.XmlTextReaderImpl.ParseRootLevelWhitespace에서 System.Xml.XmlTextReaderImpl.Throw에서 System.Xml.XmlTextReaderImpl.Throw (예외 전자) (문자열 고해상도, 문자열 인수) () 에서 1 호선, 위치 1. . System.Xml.Linq.XDocument.Parse에서 System.Xml.Linq.XDocument.Load (XmlReader를 리더, LoadOptions 옵션) 에서 System.Xml.XmlTextReaderImpl.Read() 에서 Xml.XmlTextReaderImpl.ParseDocumentContent() (문자열 텍스트 , LoadOptions options) –

+1

@Nirupama,'XDocument.Parse'에 무엇을 전달합니까? XML (문자열)을 전달해야합니다. –

+0

xml 파일의 경로를 나타내는 문자열을 전달하고 있습니다. –

관련 문제