나는 알고있다. 나는 죽음에 이른 것을 알고있다. 임 그냥 그냥이 솔루션은 여전히 관련성이 있는지 확인하기 위해 게시 이후 지금 우리는. NET 4 이상C# 및 큰 XML 파일 읽기
큰 XML 파일을 읽을 수있는 간단한 방법을 설명하고 Linq 구현합니다. 나는 이것을 아주 좋아하고 이것은 단지 여전히 관련이 있거나 최신 .NET 코드에서 구현이 더 나은지 간단하게 설명하고 싶다.
나는 알고있다. 나는 죽음에 이른 것을 알고있다. 임 그냥 그냥이 솔루션은 여전히 관련성이 있는지 확인하기 위해 게시 이후 지금 우리는. NET 4 이상C# 및 큰 XML 파일 읽기
큰 XML 파일을 읽을 수있는 간단한 방법을 설명하고 Linq 구현합니다. 나는 이것을 아주 좋아하고 이것은 단지 여전히 관련이 있거나 최신 .NET 코드에서 구현이 더 나은지 간단하게 설명하고 싶다.
이 질문에 대한 답은 .NET 4에서 변경되지 않았습니다 - 그것은 가 대신 메모리에 전체 일을로드하는 문서를 스트림으로 최적의 성능을 위해 여전히 XmlReader를 사용한다.
참조하는 코드는 실제 쿼리에 XmlReader
을 사용하므로 큰 문서에서는 비교적 빨리 처리해야합니다.
이 작업을 수행하는 가장 좋은 방법은 XmlReader.Create을 사용하여 줄 단위로 읽는 것입니다.
var reader = XmlReader.Create(filename);
reader.WhitespaceHandling = WhitespaceHandling.None;
while (reader.Read())
{
// your code here.
}
'XmlTextReader'가 사용되지 않습니다. – user1096188
링크 된 문서는 어디서나 deprecated라고 말하지 않으므로 나는 그렇지 않다는 것을 짐작할 수있다. – Chris
@ user1096188 지적 해 주신 것에 대해 감사 드리며, 나는 'XmlReader.Create'를 사용하도록 코드를 업데이트했다. – Ekk
는 다음과 같이 보인다면 :
<root>
<item>...</item>
<item>...</item>
...
</root>
당신이 XmlReader
으로 파일을 읽을 수 및 각 '항목이'이 같은 XmlDocument
로 엽니 다
reader.ReadToDescendant("root");
reader.ReadToDescendant("item");
do
{
XmlDocument doc = new XmlDocument();
doc.LoadXml(reader.ReadOuterXml());
XmlNode item = doc.DocumentElement;
// do your work with `item`
}
while (reader.ReadToNextSibling("item"));
reader.Close();
이 경우, 당신은 파일 크기에 제한이 없습니다.
링크 된 사이트에서 볼 수 있듯이 XML 문서를 읽고 쓰는 데 가장 쉽고 빠른 방법 (코드 작성 관점) 중 하나 인 LINQ to XML *이 언급되어 있습니다. Infact LINQ는 * C# 3.0 *에서 구현되었으며 컬렉션 및 데이터 소스에 대한 쿼리를 작성하는 강력한 방법입니다. –
@Fuex LINQ to XML을 사용하면 전체 문서가 메모리에로드되므로 코드를 쉽게 쓸 수 있지만 성능이 향상되지 않습니다. 그러나 링크 된 예제는 LINQ와 함께'XmlReader'를 사용하므로 꽤 잘 작동합니다. – James
@James 네, 동의합니다. 대용량 파일을 다룰 때 전체 데이터를 메모리에로드하는 것이 문제가되고 쿼리의 성능을 조절합니다. 따라서 * LINQ *와 함께'XmlReader'를 사용하는 것이 좋습니다. –