使用C#选择并更新XML文件中的值

时间:2012-11-23 23:04:01

标签: c# xml linq-to-xml

我有一个XML文件:

<?xml version="1.0" encoding="utf-8"?>
<Options>
  <Gestion>
    <Prêts>
      <NbrRenouvlement>5</NbrRenouvlement>
      <DureeEmprunt>10</DureeEmprunt>
      <NbrEmprunt>3</NbrEmprunt>
    </Prêts>
    <Réservations>
      <NbrReservation>3</NbrReservation>
      <DureeReservation>7</DureeReservation>
    </Réservations>
  </Gestion>
  <Config>
    <RememberMe>False</RememberMe>
    <ConnexionAutomatique>False</ConnexionAutomatique>
    <ShowToolTip>True</ShowToolTip>
  </Config>
</Options>

我想选择NbrRenouvlement的值为5,这是我写的代码:

String nbrReservation = String.Empty;
var makeInfo = from reservations in doc.Descendants("Réservations") 
           select reservations.Element("NbrReservation").Value;

但是这段代码返回一个通用列表,尽管我想要选择的值只是一个数字,所以我需要使用foreach循环:

foreach (string s in makeInfo.Distinct()) 
               nbrReservation.Text += s;

这个方法工作正常,但是对于选择一个值来说太长了,是否还有其他方法允许我从该XML文件中选择NbrReservation的值?

如何更改此值?

3 个答案:

答案 0 :(得分:3)

  

我想选择NbrRenouvlement

的值

您可以使用XPath(System.Xml.XPath)。

var five = xDoc.XPathSelectElement("//NbrRenouvlement").Value;

这是与你问题中的代码相似的代码

var xDoc = XDocument.Parse(xml);
var makeInfo = xDoc.XPathSelectElement("//Réservations/NbrReservation");
if (makeInfo != null)
{
    var val = makeInfo.Value;
    //makeInfo.Value = newValue;
}

答案 1 :(得分:1)

阅读并保存价值:

XDocument xdoc = XDocument.Load(path_to_xml);
var nbrReservation = xdoc.Descendants("Réservations")
                         .Single() // if you have single reservations node
                         .Element("NbrReservation");
int value = (int)nbrReservation;
nbrReservation.SetValue(42);
xdoc.Save(path_to_xml);

答案 2 :(得分:1)

这将为您提供字符串(IEnumerable<string>):

的列表
var makeInfo = from reservations in doc.Descendants("Réservations") 
       select reservations.Element("NbrReservation").Value;

如果你把它改为:

var makeInfo = (from reservations in doc.Descendants("Réservations") 
       select reservations.Element("NbrReservation")).First().Value;

然后你可以这样做:

nbrReservation.Text += s;

这假设NbrReservation节点保证在XML中。