簡體   English   中英

如何設置讀取xml文件的起點?

[英]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有一些輔助方法可以幫助完成此任務,例如ReadToNextSiblingReadToFollowing 基本上,這是最好的方法,除非您使用各種元素(例如,每100個或1000個元素)的字節偏移量(分別)對文件進行預索引。 而這樣意味着你會在片段來工作(而不是文件)模式,你需要非常小心的命名空間(特別是:在文檔根目錄聲明的別名)。

基本上,如果我們以擁有一個111MB,數百萬元素的xml文件為前提,那么你所做的似乎是正確的 坦白說,我的建議是一開始就不要這樣做 Xml對於海量數據不是一個好的選擇,除非它純粹是一個致命的問題,也許以后會再次批量加載。 它不允許有效的隨機訪問。

如果您需要經常執行此操作,則說明您做錯了事。 數據應該在數據庫中,或者至少存儲在較小的塊中。

如果您不經常這樣做,那真的有問題嗎? 我希望它在5秒鍾左右就可以實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM