从xml加载信息,使用c#保存相关(已更改)信息

时间:2012-04-03 04:36:52

标签: c# xml winforms

友 我的学校项目有一个xml数据文件:

<patients>
<patient>
<regNo>2012/Mar/003</regNo>
<name>Jhon</name>
<add>Somewhere</add>
<mobile>0000</mobile>
.
.
.
<stay>2</stay>
<costofroom>100</costofroom>
<total>200</total>
</patient>
</patients>

我的Windowsform“ EditPatients_Load ”能够获取患者Jhon的所有信息,现在我们假设管理员需要更改表格中的一些信息。重新提交。

  

然后如何在同一个xml中将所有值写回Jhon的帐户   文件????

我无法构建逻辑代码,即使我检查节点if(patients.paptient.name =“nameComboBox.text”)....如何确保我正在编写其他值适当的地方?

Rgrdz,

3 个答案:

答案 0 :(得分:2)

试试这个:

//string xml = 
            //@"<patients><patient><regNo>2012/Mar/003</regNo><name>Jhon</name><add>Somewhere
            //</add><mobile>0000</mobile><stay>2</stay><costofroom>100</costofroom><total>200</total>
            //</patient></patients>";
            XDocument xmlDoc = XDocument.Load(@"c:\abc.xml");
            var items = (from item in xmlDoc.Descendants("patient")
                         where item.Element("name").Value == "Jhon"
                         select item);
            if (items.Count() > 0)
            {
                var item = items.First();
                item.SetElementValue("add", "New New Address");
                xmlDoc.Save(@"c:\abc.xml", SaveOptions.None);
            }

您可以使用

获取单个元素
var item = (from item in xmlDoc.Descendants("patient")
                             where item.Element("name").Value == "Jhon"
                             select item).FirstOrDefault();

然后使用SetElementValue()方法更新它。

//更新了Xml

<?xml version="1.0" encoding="utf-8"?>
<patients>
  <patient>
    <regNo>2012/Mar/003</regNo>
    <name>Jhon</name>
    <add>New Address</add>
    <mobile>0000</mobile>
    <stay>2</stay>
    <costofroom>100</costofroom>
    <total>200</total>
  </patient>
</patients>

参考:
Update XML with C# using Linq

答案 1 :(得分:1)

我会采用xml序列化/反序列化路由来解决这个问题:

http://support.microsoft.com/kb/815813

How to Deserialize XML document

这样您就可以使用对象而不必手动解析xml文件。

答案 2 :(得分:1)

如果您使用的是.NET 3.5 向前,则可以使用XDocument类,如下所示。我假设您的内容位于.xml文件中。

XDocument xdoc = XDocument.Load(@"C:\Tmp\test.xml");
//this would ensure you get the right node and set its text content/value
xdoc.Element("patients")
     .Element("patient").Element("add").Value = "some new address?";
xdoc.Save(@"C:\Tmp\test.xml");

文件test.xml将更改为:

<patients>
 <patient>
  <regNo>2012/Mar/003</regNo>
  <name>Jhon</name>
  <add>some new address?</add>
  <mobile>0000</mobile>
  <stay>2</stay>
  <costofroom>100</costofroom>
  <total>200</total>
 </patient>
</patients>