2017-11-23 26 views
-1

XMLファイル内のネストされた要素の値を取得しようとしているところに問題があります。C#のXMLリーダーでネストされた値を取得する

-<Modules> 
-<Modules4> 
    -<Module> 
     <Name>dasd</Name> 
     <Code>dasdasdas</Code> 
     <Credits>40</Credits> 
    </Module> 
    -<Module> 
    <Name>dasdasd</Name> 
    <Code>dasdasd</Code> 
    <Credits>40</Credits> 
    </Module> 
</Modules4> 

<Modules5/> 

<Modules6/> 

</Modules> 

これはXMLファイルで、私は、「コード」は、読者が「Modules4」の要素を見つけた場合は、ネストされた要素「名前」を取得条件を作成しようとしていますし、「クレジット」この質問の場合私はそれをどこにも見つけることができないので、私に指示してください。

using (XmlReader reader = XmlReader.Create("SavedData.xml")) 
      while (reader.Read()) 
     { 
       if (reader.IsStartElement()) 
       { 
        if (reader.Name == "Modules4"){ 

        switch (reader.Name) 
        { 
         case "Name": 
          string name = reader.ReadString(); 
          Console.WriteLine(name); 
          break; 

         case "Code": 
          string Code = reader.ReadString(); 
          Console.WriteLine(Code); 
          break; 

         case "Credits": 

          break; 


        } 
       } 
      } 
     } 
    } 

これは私のコードです。

ありがとうございました。

+0

まず、XmlReaderが必要ですか(つまり、データが〜1GB以上ですか?)これは、XElementでは非常に簡単です。 –

+0

私はそれを使用したことがない、ちょうどXmlReaderが簡単だと思った。 – Whome123

+0

あなたは間違っていると思った。 System.Xml.Linqを見てください。 –

答えて

0

あなたの現在のコードの問題はreader.Nameは、その子の1つ"Modules4"決してないときswitchのみが到達していることです。

私はあなたが私がReadSubtree()メソッドを使用したいならば:

... 
if (reader.IsStartElement()) 
{ 
    if (reader.Name == "Modules4") 
    { 
     ReadModules4(reader.ReadSubtree()); 
    } 
} 
... 

その後、あなたは別の方法でサブツリーを処理することができます。

void ReadModules4(XmlReader reader) 
{ 
    while (reader.Read()) 
    { 
     switch (reader.Name) 
     { 
      ... 
     } 
    } 
} 
+0

ありがとうございます!まさに私が望んでいたもの! – Whome123

0

を私はXMLリーダーとxmlの組み合わせを使用して好きlinq

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Xml; 
using System.Xml.Linq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     const string FILENAME = @"c:\temp\test.xml"; 
     static void Main(string[] args) 
     { 
      XmlReader reader = XmlReader.Create(FILENAME); 

      reader.ReadToFollowing("Modules4"); 
      XmlReader module4Subtree = reader.ReadSubtree(); 
      while (!module4Subtree.EOF) 
      { 
       if (module4Subtree.Name != "Module") 
       { 
        module4Subtree.ReadToFollowing("Module"); 
       } 
       if (!module4Subtree.EOF) 
       { 
        XElement module = (XElement)XElement.ReadFrom(module4Subtree); 
        Module.modules.Add(new Module() { name = (string)module.Element("Name"), code = (string)module.Element("Code"), credits = (int)module.Element("Credits") }); 
       } 

      } 
     } 
    } 
    public class Module 
    { 
     public static List<Module> modules = new List<Module>(); 

     public string name { get; set; } 
     public string code { get; set; } 
     public int credits { get; set; } 
    } 
} 
関連する問題