2016-06-30 9 views
1

XML-Datei:kann nicht XML-Array lesen, wenn Array Geordnetes Tag

<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

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

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

was soll ich hier, so kann ich nach vorne durch approching die in XML gehen schreiben müssen Sohn-Feld oder Element 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); 

    } 

    } 

}

Wenn ich den Tag <AttackPatternLeft> aus der XML-Datei zu entfernen Ich bin in der Lage, den Muster-Array in XML zu lesen, aber kann es nicht lesen, wenn ich Muster Array als Kind <AttackPatternLeft> Element mache

+0

Erhalten Sie eine Ausnahme? Wenn Sie eine Instanz von TeamContainer in XML serialisieren (und die Musterauflistung enthält einige Daten), nimmt die resultierende XML-Datei das Formular wie oben an? (Vielleicht überprüfen Sie alle richtigen Attribute auf allen serialisierbaren Eigenschaften?) – Fredrik

+0

Nein Ich erhalte keine Ausnahmefehler. Ich bin gerade nicht in der Lage, das Pattern-Array zu bekommen, wenn das Pattern-Array das Eltern-Tag hat. Wenn ich diese Zeile entferne, bin ich in der Lage, das XML zu lesen ..... hier ist mein anderer Dateicode zum Laden und Anzeigen von XML hinzugefügt in einem obigen Fragekommentar –

Antwort

0

Sie müssen die folgenden Klassen verwenden:

[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; } 
} 
Verwandte Themen