Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 试图将表单数据保存回XML文件_C#_Xml - Fatal编程技术网

C# 试图将表单数据保存回XML文件

C# 试图将表单数据保存回XML文件,c#,xml,C#,Xml,我有一个表单,用户可以从我包含的XML文件中检索信息。但现在我想知道,如果用户更改了数据和信息,并点击保存按钮,数据将保存到XML文件中。我好像就是做不好。我还有一个SaveVendors方法,我想知道如何调用该方法。我已经包括了我尝试过的代码、方法和XML文件。谢谢 private void btnSave_Click(object sender, EventArgs e) { if (IsValidData()) //8 constructors

我有一个表单,用户可以从我包含的XML文件中检索信息。但现在我想知道,如果用户更改了数据和信息,并点击保存按钮,数据将保存到XML文件中。我好像就是做不好。我还有一个SaveVendors方法,我想知道如何调用该方法。我已经包括了我尝试过的代码、方法和XML文件。谢谢

private void btnSave_Click(object sender, EventArgs e)
        {




           if (IsValidData()) //8 constructors and how will it connect to XML file
            {
                vendors = new Vendor(txtName, txtAddress, txtCity, txtPhone);

                this.Close();
            }
            //run validation, then take data and save it to XML file.



       }

  public static void SaveVendors(List<Vendor> vendors)
        {
            // create the XmlWriterSettings object
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Indent = true;
            settings.IndentChars = ("    ");

            // create the XmlWriter object
            XmlWriter xmlOut = XmlWriter.Create(Path, settings);

            // write the start of the document
            xmlOut.WriteStartDocument();
            xmlOut.WriteStartElement("Vendors");

            // write each product object to the xml file
            foreach (Vendor vendor in vendors)
            {
                xmlOut.WriteStartElement("Vendor");
                xmlOut.WriteElementString("Name", vendor.Name);
                xmlOut.WriteElementString("Address", vendor.Address);
                xmlOut.WriteElementString("City", vendor.City);
                xmlOut.WriteElementString("State", vendor.State);
                xmlOut.WriteElementString("ZIP", vendor.Zip);
                xmlOut.WriteElementString("Phone", vendor.Phone);
                xmlOut.WriteElementString("YTD", Convert.ToString(vendor.YTD));
                xmlOut.WriteElementString("Comment", vendor.Comment);
                xmlOut.WriteElementString("Contact", vendor.Contact);
                xmlOut.WriteElementString("DefaultDiscount", Convert.ToString(vendor.DefaultDiscount));

                xmlOut.WriteEndElement();
            }

<?xml version="1.0" encoding="utf-8"?>
<Vendors>
  <Vendor>
    <Name>Scarmado Produce Co.</Name>
    <Address>244 Southwest Dr.</Address>
    <City>Bryan</City>
    <State>Texas</State>
    <ZIP>77805</ZIP>
    <Phone>9797784456</Phone>
    <YTD>2500000</YTD>
    <Comment>Great vendor</Comment>
    <Contact>James Scarmado</Contact>
    <DefaultDiscount>15</DefaultDiscount>
  </Vendor>
  <Vendor>
    <Name>Talbort Restaurant Supplies</Name>
    <Address>2533 Broadway Ave.</Address>
    <City>New Orleans</City>
    <State>LA USA</State>
    <ZIP>89554</ZIP>
    <Phone>7664028762</Phone>
    <YTD>1589000</YTD>
    <Comment></Comment>
    <Contact>Joan Fishing</Contact>
    <DefaultDiscount>20</DefaultDiscount>
  </Vendor>
  <Vendor>
    <Name>Famous Meats</Name>
    <Address>222 Swey Ave.</Address>
    <City>Bangkok</City>
    <State>Thailand</State>
    <ZIP>75110</ZIP>
    <Phone>883778723</Phone>
    <YTD>186000</YTD>
    <Comment>Good vendor</Comment>
    <Contact>Faye Smith</Contact>
    <DefaultDiscount>15</DefaultDiscount>
  </Vendor>
  <Vendor>
    <Name>Duetsch Products</Name>
    <Address>253 Hamburg Ave.</Address>
    <City>Hamburg</City>
    <State>Germany</State>
    <ZIP>APO 76632</ZIP>
    <Phone>109019834</Phone>
    <YTD>258260</YTD>
    <Comment>Difficult delivery system</Comment>
    <Contact>Ian Friberg</Contact>
    <DefaultDiscount>20</DefaultDiscount>
  </Vendor>
  <Vendor>
    <Name>Allegheny Drink Products</Name>
    <Address>2862 Hamilton St.</Address>
    <City>Dallas</City>
    <State>Texas</State>
    <ZIP>80256</ZIP>
    <Phone>7149872957</Phone>
    <YTD>875390</YTD>
    <Comment></Comment>
    <Contact>Cheryl Montana</Contact>
    <DefaultDiscount>15</DefaultDiscount>
  </Vendor>
  <Vendor>
    <Name>Best Cheeses Around</Name>
    <Address>2732 Gouda Ct.</Address>
    <City>Lincoln</City>
    <State>Nebraska USA</State>
    <ZIP>67499</ZIP>
    <Phone>4028776509</Phone>
    <YTD>679270</YTD>
    <Comment></Comment>
    <Contact>Dave Pfister</Contact>
    <DefaultDiscount>15</DefaultDiscount>
  </Vendor>
</Vendors>
private void btnSave\u单击(对象发送者,事件参数e)
{
if(IsValidData())//8个构造函数,它将如何连接到XML文件
{
供应商=新供应商(txtName、txtAddress、txtCity、txtPhone);
这个。关闭();
}
//运行验证,然后获取数据并将其保存到XML文件。
}
公共静态供应商(列出供应商)
{
//创建XmlWriterSettings对象
XmlWriterSettings=新的XmlWriterSettings();
settings.Indent=true;
settings.IndentChars=(“”);
//创建XmlWriter对象
XmlWriter xmlOut=XmlWriter.Create(路径、设置);
//写文档的开头
WriteStartDocument();
xmlOut.WriteStarteElement(“供应商”);
//将每个产品对象写入xml文件
foreach(供应商中的供应商)
{
xmlOut.WriteStarteElement(“卖方”);
WriteElementString(“Name”,vendor.Name);
WriteElementString(“地址”,vendor.Address);
WriteElementString(“City”,vendor.City);
WriteElementString(“State”,vendor.State);
WriteElementString(“ZIP”,vendor.ZIP);
WriteElementString(“Phone”,vendor.Phone);
WriteElementString(“YTD”,Convert.ToString(vendor.YTD));
WriteElementString(“Comment”,vendor.Comment);
WriteElementString(“Contact”,vendor.Contact);
WriteElementString(“DefaultDiscount”,Convert.ToString(vendor.DefaultDiscount));
WriteEndElement();
}
斯卡马多生产公司。
244西南博士。
布莱恩
得克萨斯州
77805
9797784456
2500000
大卖主
詹姆斯·斯卡马多
15
塔尔博特餐厅用品
百老汇大街2533号。
新奥尔良
美国洛杉矶
89554
7664028762
1589000
琼钓鱼
20
名菜
斯维大道222号。
曼谷
泰国
75110
883778723
186000
卖主
费伊·史密斯
15
杜奇产品
汉堡大道253号。
汉堡
德国
载脂蛋白76632
109019834
258260
难产系统
伊恩·弗里伯格
20
阿勒格尼饮料产品
汉密尔顿街2862号。
达拉斯
得克萨斯州
80256
7149872957
875390
谢丽尔·蒙大拿
15
最好的奶酪
2732高达Ct。
林肯
美国内布拉斯加州
67499
4028776509
679270
戴夫·普菲斯特
15

首先,您应该使用
XDocument
使用System.Xml.Linq

下面的内容应该会对您有所帮助

1.加载XML文档:

var xDoc = XDocument.Load(xmlPath);
var newEle = new XElement("Vendor",
    new XElement("Name", vendor.Name),
    new XElement("Address", vendor.Address),
    new XElement("City", vendor.City),
    new XElement("State", vendor.State),
    new XElement("ZIP", vendor.Zip),
    new XElement("Phone", vendor.Phone),
    new XElement("YTD", Convert.ToString(vendor.YTD)),
    new XElement("Comment", vendor.Comment),
    new XElement("Contact", vendor.Contact),
    new XElement("DefaultDiscount", Convert.ToString(vendor.DefaultDiscount)));
xDoc.Root.Add(newEle);
xDoc.Descendants("Vendor")
    .Where(w => w.Element("Name").Value == "Allegheny Drink Products")
    .First()
    .ReplaceWith(newEle); // Replaces that element with newEle created above.
xDoc.Save(xmlPath);
2.创建新元素的代码:

var xDoc = XDocument.Load(xmlPath);
var newEle = new XElement("Vendor",
    new XElement("Name", vendor.Name),
    new XElement("Address", vendor.Address),
    new XElement("City", vendor.City),
    new XElement("State", vendor.State),
    new XElement("ZIP", vendor.Zip),
    new XElement("Phone", vendor.Phone),
    new XElement("YTD", Convert.ToString(vendor.YTD)),
    new XElement("Comment", vendor.Comment),
    new XElement("Contact", vendor.Contact),
    new XElement("DefaultDiscount", Convert.ToString(vendor.DefaultDiscount)));
xDoc.Root.Add(newEle);
xDoc.Descendants("Vendor")
    .Where(w => w.Element("Name").Value == "Allegheny Drink Products")
    .First()
    .ReplaceWith(newEle); // Replaces that element with newEle created above.
xDoc.Save(xmlPath);
3a.如果您纯粹是在文档末尾添加一个新的
元素:

var xDoc = XDocument.Load(xmlPath);
var newEle = new XElement("Vendor",
    new XElement("Name", vendor.Name),
    new XElement("Address", vendor.Address),
    new XElement("City", vendor.City),
    new XElement("State", vendor.State),
    new XElement("ZIP", vendor.Zip),
    new XElement("Phone", vendor.Phone),
    new XElement("YTD", Convert.ToString(vendor.YTD)),
    new XElement("Comment", vendor.Comment),
    new XElement("Contact", vendor.Contact),
    new XElement("DefaultDiscount", Convert.ToString(vendor.DefaultDiscount)));
xDoc.Root.Add(newEle);
xDoc.Descendants("Vendor")
    .Where(w => w.Element("Name").Value == "Allegheny Drink Products")
    .First()
    .ReplaceWith(newEle); // Replaces that element with newEle created above.
xDoc.Save(xmlPath);
3b.假设您想编辑名为“阿勒格尼饮料产品”的供应商,您可以这样写:

var xDoc = XDocument.Load(xmlPath);
var newEle = new XElement("Vendor",
    new XElement("Name", vendor.Name),
    new XElement("Address", vendor.Address),
    new XElement("City", vendor.City),
    new XElement("State", vendor.State),
    new XElement("ZIP", vendor.Zip),
    new XElement("Phone", vendor.Phone),
    new XElement("YTD", Convert.ToString(vendor.YTD)),
    new XElement("Comment", vendor.Comment),
    new XElement("Contact", vendor.Contact),
    new XElement("DefaultDiscount", Convert.ToString(vendor.DefaultDiscount)));
xDoc.Root.Add(newEle);
xDoc.Descendants("Vendor")
    .Where(w => w.Element("Name").Value == "Allegheny Drink Products")
    .First()
    .ReplaceWith(newEle); // Replaces that element with newEle created above.
xDoc.Save(xmlPath);
4.现在保存文档:

var xDoc = XDocument.Load(xmlPath);
var newEle = new XElement("Vendor",
    new XElement("Name", vendor.Name),
    new XElement("Address", vendor.Address),
    new XElement("City", vendor.City),
    new XElement("State", vendor.State),
    new XElement("ZIP", vendor.Zip),
    new XElement("Phone", vendor.Phone),
    new XElement("YTD", Convert.ToString(vendor.YTD)),
    new XElement("Comment", vendor.Comment),
    new XElement("Contact", vendor.Contact),
    new XElement("DefaultDiscount", Convert.ToString(vendor.DefaultDiscount)));
xDoc.Root.Add(newEle);
xDoc.Descendants("Vendor")
    .Where(w => w.Element("Name").Value == "Allegheny Drink Products")
    .First()
    .ReplaceWith(newEle); // Replaces that element with newEle created above.
xDoc.Save(xmlPath);