2009-06-22 2 views
0

LINQ를 사용하여 매우 크고 깊게 중첩 된 XML 문서를 스트리밍하는 동안 스트리밍하는 동안 몇 가지 기준에 따라 노드를 필터링 한 다음 스트리밍 된 출력을 파일에 쓰는 방법을 알고 싶습니다. XML트리 구조를 유지하면서 LINQ (스트리밍 만)를 사용하여 깊이 중첩 된 XML을 필터링 할 수 있습니까?

전체 문서를 메모리에로드하지 않고 수행해야합니다.

이것이 가능합니까? XML에

답변

1

LINQ 직접 스트리밍 방식으로 읽기를 지원하지 않습니다,하지만 난 서브 트리 I을 발견 한 경우 XElement.Load에 전달 후 , 그리고 기반으로 필터링, XmlReader을 사용하여 성공을 거두었습니다 하위 트리가 메모리에 맞게 충분히 작다고 가정합니다. Load이 반환되면 독자는 해당 하위 트리를 넘어 이동하고 다음 관련 하위 트리를 찾을 때까지 계속 이동할 수 있습니다.

자세한 내용과 예제 코드는 this MSDN blog post을 참조하십시오.

는 (이것은 내가, BTW, XML 스트리밍 옵션의

+0

안녕 존 재미,이 답변을 게시 한 동안 난 그냥 당신이 비디오를보고 있었다 : 를 http://skillsmatter.com/podcast/open-source-dot-net/jon-skeet-talks-on- c-sharp-3-0 대답에 관해서는, 그 결과는 평평한 결과를 내지 않을 것입니까? XMLReader를 사용하여 XML을 스트리밍하고 LINQ에 하나씩 전달하는 방법을 알고 있습니다. 문제는 필터링을 통해 XML 구조가 출력에 느슨하게됩니다. – aattia

0

:) http://blogs.msdn.com/xmlteam/archive/2007/03/05/streaming-with-linq-to-xml-part-1.aspx로 시작하는 XML에 LINQ와 스트리밍의 XML 팀의 토론을 체크 아웃 스택 오버플로 데이터 덤프했던 것입니다. 초기 블로그 시리즈이며 최종 릴리스에서 구현 세부 사항이 변경되었음을 알 수 있습니다.

+0

안녕하세요, 나는 깊이 읽었습니다. 문제는 깊이 중첩 된 구조를 다루는 것에 대해 깊이 관여하지 않는다는 것입니다. 그들은이 시리즈의 미래 3 부에서 이것을 참조합니다. 결코 찾을 수 없었습니다. 오직 1 부와 2 부를 찾을 수 있습니다. – aattia

관련 문제