XML 문서를 스트리밍하는 코드에서 XElements 대신 강력하게 형식화 된 객체를 반환하고 싶습니다. 말 질문에서 XML 문서는 다음과 같습니다XML 문서를 스트리밍 할 때 XElements 대신 강력하게 형식이 지정된 객체를 반환하는 방법
<?xml version="1.0" encoding="utf-8" ?>
<People>
<Person>
<FirstName>John</FirstName>
<LastName>Smith</LastName>
</Person>
<Person>
<FirstName>Adam</FirstName>
<LastName>Smith</LastName>
</Person>
<Person>
<FirstName>Jane</FirstName>
<LastName>Smith</LastName>
</Person>
</People>
현재, 내 독자 코드는 다음과 같습니다
public class PeopleReader
{
public static IEnumerable<XElement> StreamPerson(string path)
{
using (XmlReader rdr = XmlReader.Create(path))
{
rdr.MoveToContent();
while (rdr.Read())
{
if (rdr.NodeType == XmlNodeType.Element && rdr.Name == "Person")
{
XElement item = XElement.ReadFrom(rdr) as XElement;
if (item != null)
yield return item;
}
}
}
}
}
현재의 호출 코드는 다음과 같습니다 내가 가진
// Current implementation
foreach (var person in PeopleReader.StreamPerson(@"...\People.xml"))
{
MessageBox.Show(person.Element("LastName").Value);
}
는 .Element
전화 및 .Value
.
내가 코드를 호출하기로하고 싶은 것은 :
// Required implementation where person is returned as a strongly typed obj.
foreach (var person in PeopleReader.StreamPerson(@"...\People.xml"))
{
MessageBox.Show(person.LastName);
}
나는 내가 .XSD 파일은 다음 파일을 .cs 생성 생성 xsd.exe를 사용할 수 있다는 것을 이해하지만, 내가 분명히에 아니에요 실제 단계. 또한 호출 코드가 열거 형 객체를 받기 위해 생성 된 클래스를 반환하도록 독자 코드를 변경하는 방법을 잘 모르겠습니다. 즉, XElements에서 강력한 형식의 클래스로 이동하는 방법은 무엇입니까? Casting이 옵션으로 보이지 않습니다?
VS2015를 사용하고 있으며 가능하다면 타사 도구를 사용할 필요가 없습니다.
미리 감사드립니다. 이러한 것을 이해 한 -
public static IEnumerable<XElement> StreamPerson(string path)
{
using (XmlReader rdr = XmlReader.Create(path))
{
rdr.MoveToContent();
while (rdr.Read())
{
XElement item = XElement.ReadFrom(rdr) as XElement;
if (item != null)
{
yield return new Person
{
FirstName = item.Element("FirstName")?.Value,
LastName = item.Element("LastName")?.Value
};
}
}
}
}
업데이트 :
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
를 그리고 그것의 새 인스턴스를 반환 대신 Person
을 유형을 만들고 반환 IEnumerable<Person>
을 IEnumerable<XElement>
를 반환
먼저 강력한 유형이 필요합니다. 직접 작성하거나 실행해야합니까? –
안녕하세요 @HenkHolterman, 손으로 할 수 없습니다. 생성 된 것이 가장 좋습니다. 여기에 간단한 예제 만 사용하여 – Cleve