Linq를 사용하여 XML 파일에서 읽으려고 시도하는 두 클래스 - Cd
및 Track
이 있습니다. linq to xml 초기화 배열
public Cd(string t, string a, string cat, DateTime rls, Track[] tr)
public Track(string t, int l)
XML은 다음과 같습니다. 문제는 내가 XML 파일에서 읽은 모든 트랙 배열을 초기화하는 방법을 모르는 것입니다
XElement xdoc = XElement.Load("dbxml.xml"); var temp = from cds in xdoc.Descendants("cd") select new Cd( cds.Element("artist").Value, cds.Element("album").Attribute("Name").Value, cds.Element("album").Attribute("Type").Value, DateTime.Parse(cds.Element("album").Attribute("ReleaseDate").Value), new Track[] { // One Track reads fine.. new Track(cds.Element("album").Element("track").Value, int.Parse(cds.Element("album").Element("track").Attribute("Length").Value)) } );
을 다음과 같이
<media> <cd> <artist>Ozzy Osbourne</artist> <album Name="Bark at the moon" Type="Metal" Tracks="5" ReleaseDate="1983-12-10"> <track Length="300">Bark at the moon</track> <track Length="235">You're No Different</track> <track Length="567">Now You See It (Now You Don't)</track> <track Length="356">Rock 'N' Roll Rebel</track> <track Length="120">Centre of Eternity</track> </album> </cd> <cd> <artist>Journey</artist> <album Name="Escape" Type="Rock" Tracks="4" ReleaseDate="1981-07-31"> <track Length="300">Don't Stop Believin'</track> <track Length="235">Stone in Love</track> <track Length="567">Who's Crying Now</track> <track Length="356">Keep on Runnin'</track> </album> </cd> </media>
내가 사용하기 위해 노력하고있어 코드입니다. .ToList()
에 전체 쿼리를 래핑 할 수 있고 anonomyous 타입을 사용하고 foreach
-it하지만 linq을 사용하여 실행하는 방법이 있는지 알고 싶습니다.
cds.Elements("album").Elements("song")
은 IEnumerable<XElement>
컬렉션을 반환하며 배열에 범위로 추가되고 문자열과 int 또는 그로 인해 영향을받는 대상으로 바뀌어야합니다. 밖에 도움이 필요 하신가요?
감사합니다.
(from t in cds.Element("album").Elements("track")
select new Track(..., ...)
).ToArray()
이것은 밖으로 일했다 - 고마워! 실제로 모든 필드에 대해 기본 생성자 및 속성이 있습니다. 속성을 사용하여이 쿼리를보다 쉽게 읽을 수있는 방법에 대해 자세히 설명 하시겠습니까? – citizencane
독자가 더 쉽게 파싱 할 수있는 속성 할당을 찾습니다. 즉, '새 Cd() {Artist = ..., Album = ...,}'트랙과 동일합니다. – BrokenGlass
네, 읽기 쉬운 검색어 고맙습니다! 간단히 말해 C#을 더 공부해야합니다. :-) – citizencane