【发布时间】:2014-10-31 23:38:26
【问题描述】:
我有一个很大的 XML 文档 (111 MB),并且想要非常快地转到一个特殊的节点(按索引)。文档有大约 1000000 个这样的节点:
<Kt>
<PLZ>01067</PLZ>
<Ort>Dresden</Ort>
<OT>NULL</OT>
<Strasse>Potthoffstr.</Strasse>
</Kt>
我想“跳转”,例如到文档中的第 100 万个节点,然后从这里开始阅读。必须忽略此后面的所有节点。我已经用 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 的这个缺点。最初使用总是非常方便,但对于任何数量可观的数据,基于文本的格式会让您失望。