C# - 编写xml的方法

时间:2011-03-16 10:32:23

标签: c# xml

我在一个类中有产品要保存在XML文件中,产品分为几类,我想将我的产品保存在XML文件格式中,如下图所示。第1类产品在第1类下写,第2类产品在第2类下写。

我可以写一个方法吗? 提前谢谢。

<Categories>
  <Category ID="1">
    <CategoryName>Categoriname1</CategoryName> 
    <Description>drinks, coffees, beers, ales</Description> 
    <Products>
      <Product>
        <ProductName>Coffe</ProductName> 
        <QuantityPerUnit>15 boxes x 60 bags</QuantityPerUnit> 
        <UnitPrice>25</UnitPrice> 
        <UnitsInStock>3</UnitsInStock> 
        <UnitsOnOrder>0</UnitsOnOrder> 
      </Product>
      <Product>
        <ProductName>Chang</ProductName> 
        <QuantityPerUnit>24 - 12 oz bottles</QuantityPerUnit> 
        <UnitPrice>19</UnitPrice> 
        <UnitsInStock>17</UnitsInStock> 
        <UnitsOnOrder>40</UnitsOnOrder> 
      </Product>
    </Products>
  </Category>
  <Category ID="2">
    <CategoryName>Condiments</CategoryName> 
    <Description>spreads, and seasonings</Description> 
    <Products>
      <Product>
        <ProductName>Productname</ProductName> 

6 个答案:

答案 0 :(得分:2)

答案 1 :(得分:2)

您可以使用LINQ to XML。

你的例子会像......一样开始。

  var root = new XElement("Categories",
                    new XElement("Category", 
                          new XAttribute("ID",1),
                          new XElement("CategoryName", "Categoriname1")
                    )
               );     

你的intellisense应该帮助你完成剩下的工作

答案 2 :(得分:1)

您需要序列化这些类。创建标有Seri​​alizable属性的类并使用XmlSerializer

示例:

http://www.dotnetjohn.com/articles.aspx?articleid=173

答案 3 :(得分:1)

您可以使用XmlSerializer班级或XmlDocument班级或XDocument班级,甚至是XmlTextWriter班级。

答案 4 :(得分:1)

您可能还想简单地序列化您拥有的对象。你可以写一个像这样的方法:

public static bool WriteToXMLFile(string fullFileNameWithPath, Object obj, Type ObjectType)
    {
        TextWriter xr = null;
        try
        {
            XmlSerializer ser = new XmlSerializer(ObjectType);
            xr = new StreamWriter(fullFileNameWithPath);
            ser.Serialize(xr, obj);
        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if(xr != null)
                xr.Close();
        }
        return true;
    }

答案 5 :(得分:1)

一种选择是使用LINQ to XML。假设您有这些类(我删除了一些属性以简化示例):

class Category {
  public Int32 Id { get; set; }
  public String Name { get; set; }
  public IEnumerable<Product> Products { get; set; }
}

public class Product {
  public String Name { get; set; }
}

您可以创建一些测试数据:

var categories = new[] {
  new Category {
    Id = 1,
    Name = "Category 1",
    Products = new[] {
      new Product { Name = "Coffee" },
      new Product { Name = "Chang" }
    }
  },
  new Category {
    Id = 2,
    Name = "Condiments",
    Products = new[] {
      new Product { Name = "Product 1" }
    }
  }
};

然后,您可以从测试数据中创建XDocument

var xmlDocument = new XDocument(
  new XElement(
    "Categories",
    categories.Select(
      c => new XElement(
        "Category",
        new XAttribute("ID", c.Id),
        new XElement("CategoryName", c.Name),
        new XElement("Products",
          c.Products.Select(
            p => new XElement(
              "Product",
              new XElement("ProductName", p.Name)
            )
          )
        )
      )
    )
  )
);

要将其保存到文件,您可以使用Save方法:

xmlDocument.Save("Categories.xml");