2016-06-30 4 views
1

XMLファイルがある場合はXMLの配列を読み取ることができません:アレイは、親タグ

<AttackPattern> 
    <AttackPatternLeft> 
    <Pattern> 
     <Player Id="GK"> 
     <PositionX>0.0</PositionX> 
     <PositionY>0.0</PositionY> 
     </Player> 
     <Player Id="DL"> 
     <PositionX>0.0</PositionX> 
     <PositionY>1.0</PositionY> 
     </Player> 
     <Player Id="DR"> 
     <PositionX>0.0</PositionX> 
     <PositionY>2.0</PositionY> 
     </Player> 
     <Player Id="MDFL"> 
     <PositionX>0.0</PositionX> 
     <PositionY>3.0</PositionY> 
     </Player> 
     <Player Id="MDFR"> 
     <PositionX>0.0</PositionX> 
     <PositionY>4.0</PositionY> 
     </Player> 
    </Pattern> 
    </AttackPatternLeft> 
</AttackPattern> 

TeamContainer.csを私はので、私はapprochingによってXMLで前方に行くことができ、ここで記述する必要がどうあるべきか

using UnityEngine; 
using System.Collections; 
using System.Collections.Generic; 
using System.Xml; 
using System.Xml.Serialization; 
using System.IO; 

[XmlRoot("AttackPattern")] 
public class TeamContainer 
{ 

AttackPatternLeft

//[XmlElement("AttackPatternLeft")] 
    [XmlArray("Pattern")] 
    [XmlArrayItem("Player")] 
    public List<Team> listTeam = new List<Team>(); 

    // Use this for initialization 
    public static TeamContainer Load(string path) 
    { 

     TextAsset lobjTextAssetXML = Resources.Load<TextAsset>(path); 
     XmlSerializer serializer = new XmlSerializer (typeof(TeamContainer)); 

     StringReader reader = new StringReader (lobjTextAssetXML.text); 
     TeamContainer lobjTeamContainer = serializer.Deserialize (reader) as TeamContainer; 

     reader.Close(); 

     return lobjTeamContainer; 
    } 
} 

TeamLoader.cs

の子配列または要素
using UnityEngine; 
using System.Collections; 

public class TeamLoader : MonoBehaviour { 

public const string path = "AttackPattern"; 
// Use this for initialization 
void Start() { 

    TeamContainer lobjTeamContainer = TeamContainer.Load (path); 

    //print ("check->"+ lobjTeamContainer.listTeam.Count); 
    foreach (Player lobjPlayer in lobjTeamContainer.listTeam) { 
     print ("------------------------"); 
     print (lobjPlayer.strID); 
     print (lobjPlayer.fPositionX); 
     print (lobjPlayer.fPositionY); 

    } 

    } 

}

私はXMLファイルからタグ<AttackPatternLeft>を削除した場合、私はXMLでのパターン配列を読み取ることができるが、私は<AttackPatternLeft>要素

+0

例外はありますか? TeamContainerのインスタンスをXMLにシリアル化して(パターンコレクションにデータが含まれている場合)、結果のXMLファイルは上記の形式になりますか? (おそらく、すべてのシリアライズ可能なプロパティの属性が正しいことを確認してください) – Fredrik

+0

いいえ例外エラーは発生しません。パターン配列に親タグがある場合、パターン配列を取得できません。私はその行を削除する場合、私はXMLを読み込むことができる.....ここに上記の質問のコメントに追加されたXMLをロードして表示するための私の他のファイルコードです –

答えて

0

の子としてパターンの配列を作るときにそれを読んカント次のクラスセットを使用する必要があります:

[XmlRoot("AttackPattern")] 
public class TeamContainer 
{ 
    public AttackPatternLeft AttackPatternLeft { get; set; } 
} 

public class AttackPatternLeft 
{ 
    [XmlArray("Pattern")] 
    [XmlArrayItem("Player")] 
    public List<Player> Team { get; set; } 
} 

public class Player 
{ 
    public decimal PositionX { get; set; } 
    public decimal PositionY { get; set; } 
    [XmlAttribute] 
    public string Id { get; set; } 
}