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

C# 使用C选择并更新XML文件中的值,c#,xml,linq-to-xml,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</NbrEmpr

我有一个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>
但这段代码返回一个通用列表,尽管我想要选择的值只有一个数字,所以我需要使用foreach循环:

foreach (string s in makeInfo.Distinct()) 
               nbrReservation.Text += s;
这个方法工作得很好,但是选择一个值太长了,有没有其他方法允许我从XML文件中选择NBR的值

我怎样才能改变这个值呢

我想选择NBRENOUVLENT的值

您可以使用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;
}
我想选择NBRENOUVLENT的值

您可以使用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;
}

读取和保存值:

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);

读取和保存值:

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);

这将为您提供字符串IEnumerable的列表:

如果您将其改写为:

var makeInfo = (from reservations in doc.Descendants("Réservations") 
       select reservations.Element("NbrReservation")).First().Value;
然后你可以这样做:

nbrReservation.Text += s;

这是假设保留节点保证位于XML中。

这将为您提供字符串IEnumerable的列表:

如果您将其改写为:

var makeInfo = (from reservations in doc.Descendants("Réservations") 
       select reservations.Element("NbrReservation")).First().Value;
然后你可以这样做:

nbrReservation.Text += s;


这是假设NBR保留节点保证位于XML中。

NBRRenOuvElement的值可以是changed@SuSha那个么为什么你们要求nBreNouvlement的值是5呢?请参阅我在回答顶部的引用,因为在示例中,我给出了NBRRenOuvElement的值为5,但该值可以为changed@SuSha因此,您想按名称而不是值获取此节点吗?NBRENOUVLENT的值可以是changed@SuSha那个么为什么你们要求nBreNouvlement的值是5呢?请参阅我在回答顶部的引用,因为在示例中,我给出了NBRRenOuvElement的值为5,但该值可以为changed@SuSha那么您想通过名称而不是值来获取这个节点吗?我有一个问题:XDocument.Parsexml;我应该通过xml文件的路径或XDocument更改参数xml。LoadfilePathParse用于从字符串变量加载xml。如果您从文件加载xml,请使用LoadI。我尝试了此代码,但没有成功,它返回一个空值string@SuSha你试了什么?因为我在发布之前测试过它,它可以正常工作。请发布您的代码。对不起,这是我的错,我错过了一个casting我有一个问题:XDocument.Parsexml;我应该通过xml文件的路径或XDocument更改参数xml。LoadfilePathParse用于从字符串变量加载xml。如果您从文件加载xml,请使用LoadI。我尝试了此代码,但没有成功,它返回一个空值string@SuSha你试了什么?因为我在发布之前测试过它,它可以正常工作。请发布您的代码。很抱歉,这是我的错误,我错过了一个casting。您想获取NbreNuvElement的值,但您的代码尝试获取Réservations/NbreReservation的值。你能澄清一下你真正想要做什么吗?我想要以字符串的形式获取值,而不是IEnumerableSu Sha,你想要获取的是什么Nbreuvlement,而你的代码正在做的是矛盾的。你正在选择Réservations/NbrReservation。你想要获取Nbreuvlement的值,但你的代码试图获取Réservations/NbrReservation的值。你能澄清一下你真正想做什么吗?我想把值作为一个字符串而不是一个IEnumerableSu Sha来获取,你想得到的是什么,你的代码做的是矛盾的,你选择的是保留/NBR保留。