繁体   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