2010-05-17 4 views
0

이것은 해결하기 위해 노력하고있는 매우 사소한 문제 일 수 있지만, 더 나은 방법이 있다고 확신합니다. 그러니 제발 쉽게가주세요.Xml 네임 스페이스를 빠르게 검색하십시오.

우리 응용 프로그램에는 내부에 XSD 파일이 많이 있는데 XSD를 기반으로하는 데이터 세트를 구현하는 약 20-30 개의 Xml 파일이 있습니다. 일부 XML 파일은 작습니다 (< 100KB). 다른 파일은 약 3-4MB이며 일부 파일은 10MB 이상입니다.

XSD를 기반으로하는 인텔리 센스 (intellisense)를 제공하기 위해 이러한 Xml 파일이 어떤 네임 스페이스인지 확인하는 방법을 찾아야합니다. 이 구현은 문제가되지 않습니다. 다른 개발자가이 코드를 작성했습니다.

그러나 네임 스페이스를 검색하는 가장 좋은 방법은 XmlDocument (전체 구문 분석을 사용하지 않고)를 사용하지 않는 것이 확실하지 않습니다.

저는 C# 3.5를 사용 중이며 문서는 스트림 (일부는 원격 파일)을 통해 전달됩니다. 모든 파일은 * .xml (확장자 기반인지는 확인할 수 있지만) 불행히도 XML 네임 스페이스 만이 유일한 방법입니다.

지금 당장 XmlDocument를 시도했지만 큰 문서가 구문 분석되기를 기다리고 있으므로 (심지어 100Kb 문서) 비효율적이며 느린 것으로 나타났습니다.

public string GetNamespaceForDocument(Stream document); 

위의 것과 같은 것이 내 서명 시그니처입니다. 오버로드에는 "content"에 대한 문자열이 포함됩니다. RegEx (컴파일 된) 패턴이 좋을까요?

Visual Studio는 이것을 어떻게 효율적으로 관리합니까? 또 다른 대학은 C/C++에서 빠른 Xml 파서를 찾고, 내용을 파싱하고, 네임 스페이스를 .NET에서 더 느리게 되돌려주는 스텁을 가지고 있다고 말했습니다. 이는 좋은 생각입니까?

답변

2

XmlReader은 "끌어 오기"방법을 사용하여 XML을 읽을 수 있습니다 (SAX의 "푸시"방법과 유사하지만 코드 작성이 더 쉽습니다). 중요한 점은 물건을 반환하기 전에 전체 파일을 읽는 것을 기다리지 않는다는 것입니다.

+0

aha! 재미있는 것, XmlTextReader를 사용하여 네임 스페이스를 어떻게 감지 할 것이며 여러 네임 스페이스에 관심이 있습니까? –

+0

GetNamespacesInScope 메서드를 사용하여이 작업을 수행 할 수 있어야합니다. – Garett

관련 문제