0

大きな XML ファイルから XML ノードを効率的に取得するにはどうすればよいですか?

現在、XMLファイルをロードしてNodeListを取得するためのこのコードがあります。そのファイルが小さい場合(そのノードのみを含む)、これはうまく機能しました。ただし、それを別の XML ファイルとマージすると、その新しいファイル全体を読み込むと、Windows Mobile デバイスがクラッシュします (メモリ不足)。

XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(configFile);
XmlNodeList nodeList = xmlDocument.GetElementsByTagName("appsettings");

appsettings私の XML は次のようになります (アプリ内のボタンの可視性を制御するものを取得したい):

<site>
<settings>
<appsettings>
<add key="0" type="Home" value="True"/>
<add key="1" type="About" value="False"/>
<add key="2" type="Contact" value="True"/>
</appsettings>
...........
</settings>
</site>

このノードを XmlReader で検索してロードするにはどうすればよいnodeListですか? 私は使用しようとしました

4

2 に答える 2

1

を使用する必要がありますXmlReader。何かのようなもの:

using (var reader = XmlReader.Create("file://path/to/file"))
{
  reader.ReadToDescendant("appsettings");
  while (reader.Read() && reader.Name == "add")
  {
    yield return new
      {
        Key = reader.GetAttribute("key"),
        Type = reader.GetAttribute("type"),
        Value = reader.GetAttribute("value")
      };
  }
}
于 2013-10-25T18:01:38.243 に答える
0

LINQ to XMLを試しましたか? (古いモデルはすっごく40代です:P)

多分このようなもの:

var xmlDoc = XDocument.Load(@"E:\Xml.xml");
var query = xmlDoc.Root.Element("settings").Descendants().First();

「appsettings」ノードは常に特定のレベルに存在することがわかっています。そのため、ルートを取得し、設定ノードをクエリします。次に、そのノードの子孫を取得し、最初のノードを取得します。現在の場合は「appsettings」です。

これをさらに改善する LINQ の方法があることは知っていますが、これは、ビジュアル スタジオや LINQPad がなくても頭から思いつくことができるものです。

お役に立てれば。

于 2013-10-25T18:01:11.860 に答える