[英]How to set the start point for reading an xml file?
我有一個大的XML文檔(111 MB),並希望非常快速地轉到特殊節點(通過索引)。 該文檔大約有1000000個節點,如下所示:
<Kt>
<PLZ>01067</PLZ>
<Ort>Dresden</Ort>
<OT>NULL</OT>
<Strasse>Potthoffstr.</Strasse>
</Kt>
我想“跳轉”到例如文檔中的第百萬個節點,並從此開始讀取。 必須忽略此后面的所有節點。 我已經嘗試使用XMLReader,但這些開始總是從第一個節點讀取。
int i = 0;// v-----------Index of the Node where I want to go!
while (reader.Read() == (i < 1000000))
{
if (reader.Name == "PLZ")
{
textBox1.Text = reader.ReadString();
}
if (reader.Name == "Ort")
{
textBox2.Text = reader.ReadString();
}
if (reader.Name == "OT")
{
textBox3.Text = reader.ReadString();
}
if (reader.Name == "Strasse")
{
textBox4.Text = reader.ReadString();
i++;
}
這就是XML文檔結構的樣子!
<?xml version="1.0" encoding="UTF-8"?>
<dataroot xmlns:od="urn:schemas-microsoft-com:officedata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Kt.xsd" generated="2014-10-21T18:20:30">
<Kt>
<PLZ>01...</PLZ>
<Ort>Dresden</Ort>
<OT>NULL</OT>
<Strasse>NULL</Strasse>
</Kt>
<Kt>
<PLZ>01067</PLZ>
<Ort>Dresden</Ort>
<OT>Innere Altstadt</OT>
<Strasse>Marienstr.</Strasse>
</Kt>
<Kt>
<PLZ>01067</PLZ>
<Ort>Dresden</Ort>
<OT>NULL</OT>
<Strasse>Potthoffstr.</Strasse>
</Kt>
換句話說:在不讀取完整文件的情況下,可以加載大型xml文件的一部分的可能性是什么。
到目前為止 ,您將必須讀取所有數據,因為xml(與大多數基於文本的反序列化格式相同)不會使自己跳過數據。 XmlReader
有一些輔助方法可以幫助完成此任務,例如ReadToNextSibling
和ReadToFollowing
。 基本上,這是最好的方法,除非您使用各種元素(例如,每100個或1000個元素)的字節偏移量(分別)對文件進行預索引。 而這樣做意味着你會在片段來工作(而不是文件)模式,你需要非常小心的命名空間(特別是:在文檔根目錄聲明的別名)。
基本上,如果我們以擁有一個111MB,數百萬元素的xml文件為前提,那么你所做的似乎是正確的 。 坦白說,我的建議是一開始就不要這樣做 。 Xml對於海量數據不是一個好的選擇,除非它純粹是一個致命的問題,也許以后會再次批量加載。 它不允許有效的隨機訪問。
如果您需要經常執行此操作,則說明您做錯了事。 數據應該在數據庫中,或者至少存儲在較小的塊中。
如果您不經常這樣做,那真的有問題嗎? 我希望它在5秒鍾左右就可以實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.