2010-08-20 3 views
2

VB.Net에로드해야하는 XML 파일이 많이 (15-20 개) 있습니다. 그것들은 데이터베이스에있는 것처럼 설계되었습니다. 그들은 Access에서 디자인되고 XML 파일로 대량으로 내 보냅니다. 각 파일은 데이터베이스의 다른 테이블을 나타냅니다.VB.Net 구조에 XML 파일로드

이제이 정보를 VB.Net에로드해야합니다. 처음에는 DAO를 사용하고 쿼리를 통해 직접 MDB에 액세스하는 것을 좋아하지만이 프로젝트가 아래의 XNA/C#으로 쉽게 이식 될 수 있도록하기 때문에 가능하지 않습니다. (Xbox 360은 MDB를 사용할 수 없기 때문에 차라리이 문제를 해결할 것입니다.)

그래서 지금은 모든 XML 파일을 함께 모으기 위해 노력하고 있습니다. 각 공장을 개별적으로 파싱하기 위해 공장을 사용해 보았습니다. 예를 들어 세 개의 XML 파일에 '문자'클래스에 대한 데이터가 포함되어 있다면 각 XML 팩토리에 Character 인스턴스를 전달하고 클래스는 필요한 데이터를 적용합니다.

많은 코드를 가진 여러 클래스를 유지하는 것이 고통 스럽다. 게다가 디버깅하기도 어렵습니다. 그래서 저는 새로운 해결책을 찾으려고합니다.

지금 당장 생각할 수있는 유일한 것은 System.Reflection을 사용하는 것입니다. 여기서 System.Reflection은 클래스/구조체의 각 멤버를 구문 분석하고 인스턴스화하고 그 멤버의 이름을 사용하여 데이터를 읽습니다. XML 파일의 요소.

그러나 구조/클래스의 각 멤버가 XML 파일에서 일치하는 요소를 가지며 그 반대의 경우도 마찬가지입니다.

+1

휴대 성을 유지하기 위해 XML 인터페이스를 강제로 사용해야합니까? 그렇다면 관계형 데이터베이스 API는 당신이 끝내는 모든 논쟁 솔루션보다 더 이식성이 될 것입니다 ... – Tahbaza

+0

당신은 스스로를 더 어렵게 만들고 있습니다. MDB에 액세스하면됩니다. C#에서는 VB.NET과 거의 동일합니다. – David

+1

XNA/C#을 사용하여 이식성을 유지하려고합니다. XBox360에 배포되는 프로젝트에서 MDB 파일에 액세스하거나 MDB 파일을 사용할 방법이 없습니다. 차라리 하나 이상의 플랫폼이 아닌 여러 플랫폼에서 작동하는 시스템을 나중에 포트 할 때 다시 실행해야하는 시스템을 생각해 볼 수 있습니다. –

답변

2

Linq-to-XML은 좋은 솔루션입니다 (XML 리터럴 및 글로벌 네임 스페이스와 같은 항목은 even better in VB.NET). 여러 XML 파일을 DB 테이블로 취급하는 것은 때때로 어려운 일이 될 수 있지만 확실히 불가능한 것은 아닙니다. JOIN (제목에 "C#"이 있는데도 샘플이 VB에도 있음)로 시작한다고 생각합니다.

1

XML 파일의 스키마를 알고 있다면 해당 XML 파일 중 하나를 deserialize하여 .NET 개체의 인스턴스로 변환 할 수있는 .NET 클래스를 만들 수 있습니다.

XSD 파일이있는 경우 xsd.exe (Windows SDK 다운로드와 함께 제공)를 사용하여 .NET 클래스 정의를 생성 할 수도 있습니다 (또는 직렬화 가능 .NET 클래스를 작성할 수있는 것보다 XSD를 더 쉽게 작성할 수 있음).).