2016-10-10 4 views
0

私はxmlファイルから読み込もうとしますが、その非常にclonkyで、たくさんのデータが子どもの束からです。私は名前、年齢などを取得していますので、リストに追加することはできません。XMLからリスト<>にデータを追加するにはどうすればよいですか?

私のxmlファイルには、次のようになります。

<?xml version="1.0" encoding="UTF-8"?><People> 
<Person> 
    <Age>30</Age> 
    <Name>Boy</Name> 
    <Sex>Male</Sex> 
</Person> 
<Person> 
    <Age>28</Age> 
    <Name>Girl</Name> 
    <Sex>Female</Sex> 
</Person> 

そして、私のxaml.csでは、私が持っているファイル:

 List<listTest> a = new List<listTest>(); 
     var localFolder = ApplicationData.Current.LocalFolder; 
     XmlDocument xmlDocument; 
     var file = await localFolder.TryGetItemAsync("FoodData.xml") as IStorageFile; 
     xmlDocument = await XmlDocument.LoadFromFileAsync(file); 

そして、それとともに、私はどこの設定をする必要があります私はXMLからデータを取り出し、list<>に入れます:

a.add(listTest {Name = "*DATA FROM XML*", Age ="*DATA FROM XML*", Sex="*DATA FROM XML*"}); 

LINQを使用しようとしましたが、p.NodeName == "xxx"を使用して検索を行っていますが、データを取得していないようです。

xmlからリストにデータを取得する方法を教えてください。

答えて

1

のは、あなたがこのクラスを持っていると仮定しましょう:

public class Person 
{ 
    public string Name { get; set; } 
    public string Sex { get; set; } 
    public int Age { get; set; } 
} 

次に、あなたのXMLファイルをロードするために、あなたが何かを行うことができます:

var doc = XDocument.Load("path to your file"); 

var people = doc.Root 
    .Descendants("person") 
    .Select(node => new Person 
    { 
     Name = node.Element("name").Value, 
     Sex = node.Element("sex").Value, 
     Age = int.Parse(node.Element("age").Value) 
    }) 
    .ToList(); 

私はドンhttps://msdn.microsoft.com/en-us/library/bb353813.aspx

+0

チャームのように働いていました。 VS15はこれをXmlDocumentに変更するのが大好きで、うまくいきません。ですから問題が発生した場合は、それを確認してください:D – Hudlommen

1

ここでは、XMLインポートの簡単な例を示します。このコードを実行すると、結果が表示されます(trueまたはfalse)。msgはエラーメッセージのリストになります(成功の場合は空です)。

  var results = true; 
     var msg = new List<string>(0); 
     XDocument aDocument = null; 
     try 
     { 
      aDocument = XDocument.Load(""); 
     } 
     catch (Exception e) 
     { 
      results = false; 
      msg.Add(string.Format("Unable to open file:{0}", "")); 
      msg.Add(e.Message); 
     } 

     if (aDocument != null) 
     { 
      var thePeople = aDocument.Descendants("Person").ToArray(); 

      if (thePeople.Any()) 
      { 
       // there were people in the file. People is an array of XML Nodes containing your person. 
       foreach (var pers in thePeople.Select(p => new Person().FromXML(p))) 
       { 
        // here is a person 
       } 
      } 
      else 
      { 
       results = false; 
       msg.Add("No people found."); 
      } 

     } 

これが役立ちます。

追加。

Personクラスでこれを行うことができます。私は使用法を説明するためにオリジナルにコードを追加しました。

public class Person 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Sex { get; set; } 

    public XElement ToXML() 
{ 

    return new XElement("Person", "Name", Name, 
       new XElement("Age", Age), 
       new XElement("Sex", Sex)); 
} 

    public Person FromXML(XElement node) 
    { 
     try { Name = node.Element("Name").Value; } 
     catch { Name = "Not Found"; } 
     try { Age = Convert.ToInt16(node.Element("Age").Value); } 
     catch { Age = -1; } 
     try { Sex = node.Element("Sex").Value; } 
     catch { Sex = ""; } 
     return this; 
    } 
} 
+0

を参照してください。」をXDocumentはUWPで動くと思う。そのすべてのソリューション私はインターネット上で見つけるが、私は使用する必要があるようだ:var localFolder = ApplicationData.Current.LocalFolder; XmlDocument xmlDocument; var file = IStorageFileとしてlocalFolder.TryGetItemAsync( "FoodData.xml")を待機します。 xmlDocument = XmlDocument.LoadFromFileAsync(file)を待機します。 – Hudlommen

+0

そして、XDocumentを使わないと、.Descendantsは動作しません。または少なくとも私のためではありません.. – Hudlommen

+1

@Hudlommen質問を編集します。コメントは、大量のテキストブロック、特にコードに対応するために作成されていません。 –

関連する問題