1

これについて助けを求めています。開発者がこのXMLファイルを私と共有してくれたことにとても感謝しています。それは、私に多くの頭痛の種を救うはずだからです。しかし、彼は私がそれを読む方法を自分でしていると私に言いました。基本的に、私はカードゲーム用のWindowsストアアプリを書いています。カードのリストであるXMLがあり、それをリストに読み込みたいと思っています。エラーは発生せず、以前にXMLをリストに読み込んだことがあります。何かアドバイスをいただければ幸いです。

XMLのスニペットは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?><carddatabase>
    <cards>
        <card>
            <name>Tundra Kavu</name>
            <set picURL="http://gatherer.wizards.com/Handlers/Image.ashx?multiverseid=26805&amp;type=card" picURLHq="" picURLSt="">AP</set>
            <color>R</color>
            <manacost>2R</manacost>
            <type>Creature - Kavu</type>
            <pt>2/2</pt>
            <tablerow>2</tablerow>
            <text>{T}: Target land becomes a Plains or an Island until end of turn.</text>
        </card>
    </cards>
   </carddatabase>

これが私のシリアライザーです:

 public async void readFile()
        {
            StorageFolder myFolder = ApplicationData.Current.LocalFolder;
            StorageFile myFile = await myFolder.CreateFileAsync("cards.xml", CreationCollisionOption.OpenIfExists);

                XmlSerializer Serializer = new XmlSerializer(typeof(List<card>), new XmlRootAttribute("carddatabase"));
                string XmlString = await FileIO.ReadTextAsync(myFile);
                XmlDocument xmlDoc = await XmlDocument.LoadFromFileAsync(myFile);
                var settings = new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Auto, IgnoreWhitespace = true, IgnoreComments = true };
                var stringReader = new StringReader(XmlString);
                XmlReader reader = XmlReader.Create(stringReader, settings);

               List<card> temp = (List<card>)Serializer.Deserialize(reader);
            foreach(card x in temp)
            {
                await tempTable.InsertAsync(x);  
            }
        }

これが私のカードクラスです:

public class card
{
    public string id { get; set; }
    public string name { get; set; }
    public string manacost { get; set; }
    public string set { get; set; }
    public string color { get; set; }
    public string tablerow { get; set; }
    public string text { get; set; }
    public string type { get; set; }
}
4

1 に答える 1

1

Linqを使用してxmlを解析できます:

XDocument xdoc = XDocument.Load(myFile);
var cards = from c in xdoc.Descendants("card")
            select new card() {
                name = (string)c.Element("name"),
                manacost = (string)c.Element("manacost"),
                set = (string)c.Element("set"),
                color = (string)c.Element("color"),
                tableRow = (string)c.Element("tablerow"),
                text = (string)c.Element("text"),
                type = (string)c.Element("type")
            };

foreach(var card in cards)
    await tempTable.InsertAsync(card); 

また、Linqを使用すると、文字列から他のデータ型に値をキャストできるためint TableRow { get; set; }、クラスにプロパティを含めることができます。これは、として解析できますTableRow = (int)c.Element("tablerow")(またはint?、tablerow要素が不要な場合)。

ところで、C#では、タイプとプロパティにキャメルケース名を使用しています。したがって、次のようなタイプを検討してください。

public class Card
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string ManaCost { get; set; }
    public string Set { get; set; }
    public string Color { get; set; }
    public int TableRow { get; set; }
    public string Text { get; set; }
    public string Type { get; set; }
}
于 2013-01-02T02:21:02.757 に答える