友 我的学校项目有一个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,
答案 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>
答案 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>