2012-01-25 2 views
2

XML 파일 집합을 가져 와서 변환 한 다음 SQL 데이터베이스에 업로드 한 다음 다른 XML 형식으로 다시 변환하는 작업을 담당했습니다. 체재.(대형) XML 파일을 관계형 SQL로 변환

XML 파일은 다소 크기가 크며 그 중 일부는 약간 복잡하므로이 작업을 수행하는 가장 좋은 방법은 확실하지 않습니다. 물론이 과정을 어떻게 든 자동화하는 것을 좋아할 것입니다. 실제로 Entity Framework와 같은 일종의 솔루션이있을 것으로 기대하고있었습니다.

.NET에서 XML을 처리하고 처리하는 것이 매우 익숙하므로 실제로 어떤 옵션이 있는지 알지 못합니다. 저는 XSLT에 대해 읽었습니다. 그러나 그것은 저에게있어서, 제가 먼저 배워야 할 "언어"가되는 것 같아서 저를위한 솔루션이 아닙니다.

약간의 컨텍스트를 설정하기 만하면 최종 솔루션은 매주 새로운/업데이트 된 XML 버전을 가져 와서 새 데이터를 SQL에 업로드하고 다른 XML 형식으로 다시 내보내기해야합니다.

아무에게 나 진행 방법에 대한 아이디어를 줄 수 있다면 많은 도움이 될 것입니다.

첫 번째 instict는 XSD2DB 또는 XML SPY과 같은 것을 사용하여 데이터베이스 구조를 처음 만들었지 만 앞으로 어떻게 진행해야하는지 실제로 알지 못합니다.

나는 사실 매우 빈 해요 :)

+0

C#에서 OTB를 관리 할 수있는 것처럼 느껴집니다. 곧 답변이 올 것입니다 (atm at atm). –

답변

0

XSLT 또 다른 형식으로 XML 문서에 하나의 형식으로 XML 문서를 변환하는 XML 프로세서에 의해 사용되는 언어입니다. 데이터베이스에 데이터를 저장할 필요가 없으면 XSLT가 선택됩니다.

XSD2DB 또는 XML SPY와 같은 모든 도구는 일부 데이터베이스 스키마를 만들지 만 스키마 품질은 XML 문서 및 XSD의 품질에 크게 의존합니다 (XSD가 있거나 샘플 XML에서 생성 할 것입니까? ?). 생성 된 데이터베이스는 EF에 유용하지 않을 것입니다.

XSD가있는 경우 Visual Studio와 함께 제공되는 xsd.exe 도구를 사용하여 .NET 코드에서 XML 파일의 데이터를 나타내는 클래스를 생성 할 수 있습니다. XmlSerializer을 사용하여 XML 문서를 생성 된 클래스로 deserialize 할 수 있습니다. 문제는 choice과 같은 일부 XSD 구조가 .NET 코드에서 매우 추악한 방식으로 모델링된다는 것입니다. deserialization이 모든 데이터를 한 번에 읽어야하기 때문에 XML 파일이 정말 큰 경우 또 다른 문제가 성능이 될 수 있습니다. 마지막 문제는 다시 EF가 될 수 있습니다. XSD에 의해 생성 된 클래스는 엔티티로 사용할 수 없기 때문에 클래스를 매핑 할 수 없습니다.

그래서 하나는 EF를 사용하여 이러한 경우에 당신은 XSD를 분석하고 자신의 설계 데이터베이스에 사용자 지정 엔터티 및 매핑을 만들어야합니다 그리고 당신은 당신의 클래스를 입력하거나 XmlReader (최상의 성능), XmlDocument 또는 XDocument에서 또는 어떤 도구를 사용합니다 XML에서 클래스 또는 데이터베이스를 작성하는 데 도움이되며이 경우 직접 SQL을 사용하여 데이터베이스에 대한 작업을 수행 할 수 있습니다.

리버스 작업에는 다시 사용자 지정 방식이 필요합니다. 사용자 정의 EF 엔티티 또는 일부 자동 생성 클래스로 표시되는 데이터가 있으며이를 새 형식으로 변환해야합니다. 다시 xsd.exe를 사용하여 새 형식의 클래스를 가져오고 이전 클래스의 새 클래스를 채우는 사용자 지정 .NET 코드를 작성하거나 XmlWriter, XDocument 또는 XmlDocument을 사용하여 빌드 할 수 있습니다 (예 : XmlSerializer). XML 문서를 직접 대상으로합니다.

모든 형식의 데이터 마이그레이션은 바로 사용할 수있는 솔루션으로는 쉬운 작업이 아닙니다.실제로 거대한 데이터 처리가 필요한 경우 SQL Server Integration Services와 같은 도구를 사용하여 XML 및 SQL과 직접 상호 작용하고 데이터를 일괄 적으로 처리 할 수 ​​있습니다.

0

SQLXML 4.0을 살펴보십시오. 그것은 정확히 당신이 원하는 것입니다 (업로드 부분).