C# 解析XML文档的建议

C# 解析XML文档的建议,c#,xml,serialization,xml-serialization,deserialization,C#,Xml,Serialization,Xml Serialization,Deserialization,希望能在这方面得到一些帮助:我非常感谢一位开发人员与我共享了这个XML文件,因为它会让我省去很多麻烦。但他告诉我,我只能靠自己去读。基本上,我正在为一款纸牌游戏编写一款windows应用商店应用程序。我有一个XML,它是我的卡片列表,我想把它读入一个列表。我没有收到任何错误,并且以前已将XML读入列表。如有任何建议,将不胜感激 下面是一段XML: <?xml version="1.0" encoding="UTF-8"?><carddatabase> <ca

希望能在这方面得到一些帮助:我非常感谢一位开发人员与我共享了这个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>
您可以使用以下方法解析xml:

此外,Linq允许您将值从字符串强制转换为其他数据类型,因此您可以在类中拥有属性
inttableRow{get;set;}
,可以将其解析为
TableRow=(int)c.Element(“TableRow”)
(或者
int?
,如果TableRow元素不是必需的话)

顺便说一句,在C#中,我们对类型和属性使用CamelCase名称。因此,考虑有类似的类型:

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; }
}
您可以使用以下方法解析xml:

此外,Linq允许您将值从字符串强制转换为其他数据类型,因此您可以在类中拥有属性
inttableRow{get;set;}
,可以将其解析为
TableRow=(int)c.Element(“TableRow”)
(或者
int?
,如果TableRow元素不是必需的话)

顺便说一句,在C#中,我们对类型和属性使用CamelCase名称。因此,考虑有类似的类型:

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; }
}

你能描述一下你遇到的实际问题吗?这可能不言而喻,但魔法采集卡上的文字和图像是海岸的版权向导。我不是律师,但要小心处理XML文件以及它的分发方式。readFile()方法完成后,列表中什么都没有。所以我没有什么可处理的。谢谢akton,我确实获得了使用链接的权限,只要我不存储本地副本并在应用程序中提到它们的来源。你能描述一下你遇到的实际问题吗?这可能不言而喻,但魔法采集卡上的文本和图像是海岸的版权向导。我不是律师,但要小心处理XML文件以及它的分发方式。readFile()方法完成后,列表中什么都没有。所以我没有什么可处理的。谢谢akton,我确实获得了使用链接的权限,只要我不存储本地副本并在应用程序中提到它们是源。诅咒,打败我吧-不应该去填写我示例中的所有字段。:)@JerKimball谢谢:)顺便说一句,使用显式转换而不是值属性更安全-转换将为不存在的元素返回null,访问属性将引发异常工作。谢谢你们两个这么快!向所有天才提出的问题我最初的问题得到了回答,但现在我想知道是否有任何方法可以使picURL脱离设置…
(string)c.Element(“set”).Attribute(“picURL”)
诅咒,打败我-不应该在我的示例中填充所有字段。:)@JerKimball谢谢:)顺便说一句,使用显式转换而不是值属性更安全-转换将为不存在的元素返回null,访问属性将引发异常工作。谢谢你们两个这么快!所有天才头脑的问题我最初的问题得到了回答,但现在我想知道是否有任何方法可以使picURL脱离设置…
(string)c.Element(“set”).Attribute(“picURL”)
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); 
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; }
}