首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XML库存系统

XML库存系统
EN

Stack Overflow用户
提问于 2014-01-22 19:01:33
回答 2查看 1.2K关注 0票数 0

我正在尝试测试我正在开发的库存系统,但我想使用XML来实现它。输入代码之类的:

代码语言:javascript
复制
    <Item>
  <ItemName ItemName = "Apple">
    <ItemQuantity>1</ItemQuantity>
    <ItemMaxQuantity>64</ItemMaxQuantity>
    <ItemState>PERFECT</ItemState>
  </ItemName>

  <ItemName ItemName = "Sword">
    <ItemQuantity>1</ItemQuantity>
    <ItemMaxQuantity>1</ItemMaxQuantity>
    <ItemState>BROKEN</ItemState>
  </ItemName>
</Item>

我知道如何序列化之类的。但不知道如何进一步将它们放入游戏中,像我已经展示的那样拥有多个物品。我有一个库存类。这是这样的:

代码语言:javascript
复制
namespace inventory_test
{
    class Inventory
    {
        public enum ItemState
        {
            NONE,
            PERFECT,
            FINE,
            BROKEN,
            DESTROYED
        };

        /*public enum ItemType
        {
            FOOD,
            USEABLE,
            WEAPON,
            KEY,
            TOOL
        }; Implement this in the test later*/

        [XmlElement("ItemName")]
        public string ItemName
        { get; set; }

        [XmlElement("ItemState")]
        public string ItemState
        { get; set; }

        [XmlElement("ItemQuantity")]
        public string Quantity
        { get; set; }

        [XmlElement("ItemMaxQuantity")]
        public string MaxQuantity
        { get; set; }

        static void AddItem(int itemID, string itemState, int quantity, int maxquantity)
        {

        }


    }
}

这是我的program.cs:

代码语言:javascript
复制
    namespace inventory_test
{
    class Program
    {
        static void Main(string[] args)
        {
        }
//Serialization
        static public void Serialize(Inventory inventory)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Inventory));
            using (TextWriter writer = new StreamWriter(@"C:\Xml.xml"))
            {
                serializer.Serialize(writer, inventory);
            }
        }
    }
}

我不知道我现在要做什么。我现在真的被困住了,不知道该怎么办。帮帮我:)?

EN

回答 2

Stack Overflow用户

发布于 2014-01-22 20:34:12

此示例代码向您展示了如何将库存列表序列化为xml文件,以及如何读取该文件并生成相同的库存列表。

代码语言:javascript
复制
var serializer = new XmlSerializer(typeof(List<Inventory>));
var inventories = new List<Inventory>();
inventories.Add(new Inventory
{
    ItemName = "Apple",
    Quantity = "1",
    MaxQuantity = "64",
    ItemState = "PERFECT"
});
inventories.Add(new Inventory
{
    ItemName = "Sword",
    Quantity = "1",
    MaxQuantity = "1",
    ItemState = "BROKEN"
});
//write to xml file
using (var writer = new StreamWriter("inventory.xml"))
{
    serializer.Serialize(writer, inventories);
}
//read from xml file and generate List<Inventory>
using (var reader = new StreamReader("inventory.xml"))
{
    //variable 'result' will contain the same value as 'inventories'
    var result = (List<Inventory>)serializer.Deserialize(reader);
}
票数 1
EN

Stack Overflow用户

发布于 2014-01-23 11:46:33

正如您在我之前的回答中所说的,这意味着您不想使用序列化/反序列化方法,而是使用“手动”方法。您可以使用XDocument和linq-to-xml query“手动”写入和读取xml文件。示例如下:

代码语言:javascript
复制
//writing to xml file
var doc = new XDocument(new XDeclaration("1.0", "utf-8", "no"));
var root = new XElement("Item");
doc.Add(root);
foreach (var inventory in inventories)
{
    var itemNode = new XElement("ItemName");
    var itemAttribute = new XAttribute("ItemName", inventory.ItemName);
    itemNode.Add(itemAttribute);
    var itemQty = new XElement("ItemQuantity", inventory.Quantity);
    itemNode.Add(itemQty);
    var itemMaxQty = new XElement("ItemMaxQuantity", inventory.MaxQuantity);
    itemNode.Add(itemMaxQty);
    var itemState = new XElement("ItemState", inventory.ItemState);
    itemNode.Add(itemState);
    root.Add(itemNode);
}
doc.Save("Inventory.xml");

//reading from xml file created by above codes to create List<Inventory> object
var docFromFile = XDocument.Load("Inventory.xml");
var inventoriesFromFile = (from inventory in docFromFile.Descendants("ItemName")
                       select new Inventory
                                  {
                                      ItemName = inventory.Attribute("ItemName").Value,
                                      Quantity = inventory.Element("ItemQuantity").Value,
                                      MaxQuantity = inventory.Element("ItemMaxQuantity").Value,
                                      ItemState = inventory.Element("ItemState").Value
                                  }).ToList();

//in the end you'll get variable inventories and inventoriesFromFile have same value

请注意,上面代码中的inventories变量与我前面的答案(定义和内容/值)相同。同样在问题中,您只展示了一些关于XmlSerializer的知识/努力,而不是XDocument方面的知识,所以请仔细阅读代码。如果你希望我解释这个答案中的每一行代码,那就太麻烦了。祝好运

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21281082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档