0

2GB の xml ファイルがあり、ReadToFollowing メソッドを実装しようとしていますが、少しファンキーです。

これを使用すると、「if」ステートメントが機能しなくなります。基本的に、xmlReader.ReadInnerXML() は iVehicle の下のすべてのノードを戻します。私はそれがドキュメント内の各 iVehicle のすべてのノードであると想定しています (これはおそらく私が望んでいるものですが、(iVehicle ごとに) オブジェクトを設定して返すことができるように子ノードを取得する必要もあります)。

        using (FileStream stream = new FileStream(uri, FileMode.Open, FileAccess.Read))
        {
            XmlTextReader xmlReader = new XmlTextReader(stream);

            while (xmlReader.ReadToFollowing("iVehicle"))
            {
                if(xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name.Equals("FamilyName"))
                {
                    fundFamilyId = xmlReader.ReadInnerXml();
                }
                if (xmlReader.NodeType == XmlNodeType.Element && xmlReader.Name.Equals("InvestmentVehicle"))
                {
                    secId = xmlReader.GetAttribute("_Id").ToString();
                }

                if (el.NodeType == XmlNodeType.Element && el.Name == "TradingSymbol")
                {
                    ticker = xmlReader.ReadInnerXml();
                }

                yield return new parsedXML
                {
                    Id = secId,
                    FamilyName = familyName,
                    TickerId = ticker,
                };

            } 
        }

これを機能させるにはどうすればよいですか?

4

1 に答える 1

1

ReadToFollowing("iVehicle")リーダーを次の<iVehicle>ノードの先頭に配置します。成功した場合、名前はiVehicleです。

そこにたどり着くに<FamilyName>は、それを読んで/そこに移動してから、.Valueまたはそのフレーバーを使用してコンテンツを取得する必要があります。

XmlReaderは、xmlファイルを介してポインターを移動するものと考えてください。そうすれば、ポインターでデータを取得できます。

通常、ReadInnerXmlはノードを選択して別のXmlReaderに渡すために使用されるため、コードを分割できます。

于 2013-03-11T23:15:40.057 に答える