XMLReader를 사용해야하므로 구문 분석해야하는 매우 큰 XML 파일이 있습니다. 그래서이 개별적으로 각각의로드 드리겠습니다XMLReader를 사용하여 문서의 요소를 나타내는 객체를 만들 수 있습니까?
<topLevelElement>
<SecondLevelElement>
<Information1>blah</Information1>
<Information2>blah</Information2>
<Information3>blah</Information3>
</SecondLevelElement>
<SecondLevelElement>
....
</topLevelElement>
각각의 두 번째 레벨 요소가 매우 큰되지 않습니다 :이 파일은 내가 예에서 관심있는 정보를 포함하는 두 번째 레벨 요소의 큰 숫자를 포함 개체 및 구문 분석하려고하는 파일의 스키마를 기반으로 내 독자 코드를 구조화하는 것이 좋습니다.
내 스키마 개체를 만들 xsd.exe를 사용하고이 시도했다 :
while(lReader.Read())
{
if (lReader.Name == "SecondLevelElement")
{
MyXml.SecondLevelElement lSecondLevelElement = lReader.ReadElementContentAs(typeof(MyXml.SecondLevelElement), null) as MyXml.SecondLevelElement;
if (lSecondLevelElement != null)
{
// Do stuff
}
}
}
을하지만 ReadElementContentAs에없는 매우 도움이 예외와 함께 실패합니다(). MSDN의 예제는 아주 기본적인 데이터 유형에이 방법을 사용했기 때문에이 작업을 수행 할 수 있다고 확신하지는 못합니다.
그래서 내 첫 번째 질문은 이것이 가능한가, 아니면 잘못된 시간에 완전히 짖는 시간을 낭비하는 것인가? 내가 틀렸다면 독서 코드를 구조화하지 않고 XML 섹션을 구문 분석하여 XSD와 거의 일치시키는 방법이 있습니까?
EDIT 파벨의 답변을 적용한 후 디시리얼 라이 제이션 오류가 발생했습니다. 내 경우에는 자동으로 클래스를 생성하는 데 사용했던 XSD까지 내려갔습니다. 전체 문서에 대한 XSD가 있으므로 두 번째 수준 요소 클래스 이름이 실제 요소 이름과 일치하지 않습니다. 이 문제를 해결하기 위해 XSD 스키마에서 최상위 요소를 제거하고 클래스를 다시 생성했습니다. 그렇게 한 후에는 모두 완벽하게 작동했습니다.
매력처럼 작동합니다. – Marcel