0

XML ファイルを辞書に解析しようとしています。問題は、名前要素を検索してこれを行う方法をオンラインで示しているすべてのソリューションです。私のアプリケーション名要素自体が検索したいものです。

<?xml version="1.0" encoding="UTF-8"?>
    <calibration>
      <ZoomLevel 250="0.0100502512562814" />
      <ZoomLevel 251="0.0100502512562814" />
      <ZoomLevel 252="0.0100502512562814" />
      <ZoomLevel 253="0.0100502512562814" />
      <ZoomLevel 254="0.0100502512562814" />
      <ZoomLevel 255="0.0100502512562814" />
      <ZoomLevel 256="0.0100502512562814" />
      <ZoomLevel 257="0.0100502512562814" />
</calibration>

キー「250、251など」と値を削除して辞書を作成しようとしています。

これがばかげた質問である場合は申し訳ありませんが、私はC#が初めてで、これに苦労しています

4

1 に答える 1

3

残念ながら、あなたの XML は有効なものではありません。属性名は数字から始めることはできません。

しかし、XML が有効な場合にそれがどのように行われるかを示すために、次のように仮定してみましょう。

<?xml version="1.0" encoding="UTF-8"?>
    <calibration>
      <ZoomLevel _250="0.0100502512562814" />
      <ZoomLevel _251="0.0100502512562814" />
      <ZoomLevel _252="0.0100502512562814" />
      <ZoomLevel _253="0.0100502512562814" />
      <ZoomLevel _254="0.0100502512562814" />
      <ZoomLevel _255="0.0100502512562814" />
      <ZoomLevel _256="0.0100502512562814" />
      <ZoomLevel _257="0.0100502512562814" />
</calibration>

_各属性名の前に注意してください。Dictionary<int, decimal>次の LINQ to XML クエリを使用して取得できます。

var xDoc = XDocument.Load("Input.txt");

var dict = xDoc.Root.Elements("ZoomLevel")
                    .Select(x => x.Attributes().First())
                    .ToDictionary(a => int.Parse(a.Name.LocalName.Substring(1)), a => (decimal)a);

a.Name.LocalName.Substring(1)_属性名から最初の文字 - - をスキップします。

于 2013-04-08T16:19:54.890 に答える