C#如何替换两个xml元素值?

C# How Can I Replace Two Xml Element Values?

提问人:Jim G. 提问时间:11/1/2023 最后编辑:Jim G. 更新时间:11/22/2023 访问量:64

问:

起始代码:

var xDocument = XDocument.Parse(rawXmlString);

想象一下,我已经在 XDocument 中加载了下面的 XML,并且我想使用 Linq-to-XML:

<ParameterValues>
    <ParameterValue>
        <Name>Head Coach</Name>
        <Value>Bill Belichick</Value>
    </ParameterValue>
    <ParameterValue>
        <Name>Quarterback</Name>
        <Value>Mac Jones</Value>
    </ParameterValue>
</ParameterValues>

使用 C#,分别关闭值和,如何替换:NameHead CoachQuarterback

  • Bill Belichick跟?Mike Vrabel
  • Mac Jones跟?Kirk Cousins

  • 此外,如果有帮助,此 XML 文档将仅存在于内存中。它 不会保存到文件中。
  • ParameterValues确实会是 根节点。
  • 节点可能出现故障,总有一天 可能有两个以上的子节点。ParameterValue

我尝试过:

var xDocument = XDocument.Parse(rawXmlString);

我已经尝试了各种 Linq-to-XML 查询方法,但到目前为止没有太多运气。

C# LINQ-to-XML

评论


答:

3赞 Yitzhak Khabinsky 11/1/2023 #1

这里是通过 LINQ to XML 实现的。

c#

void Main()
{
    const string NEWHEADCOACH = "Mike Vrabel";
    const string NEWQUARTERBACK = "Kirk Cousins";

    XDocument xdoc = XDocument.Parse(@"<ParameterValues>
            <ParameterValue>
                <Name>Head Coach</Name>
                <Value>Bill Belichick</Value>
            </ParameterValue>
            <ParameterValue>
                <Name>Quarterback</Name>
                <Value>Mac Jones</Value>
            </ParameterValue>
        </ParameterValues>");
        
    xdoc.Descendants("ParameterValue")
        .Where(x => x.Element("Name").Value == "Head Coach")
        .Elements("Value").FirstOrDefault()?.SetValue(NEWHEADCOACH);

    xdoc.Descendants("ParameterValue")
        .Where(x => x.Element("Name").Value == "Quarterback")
        .Elements("Value").FirstOrDefault()?.SetValue(NEWQUARTERBACK);

    Console.WriteLine(xdoc);
}

输出

<ParameterValues>
  <ParameterValue>
    <Name>Head Coach</Name>
    <Value>Mike Vrabel</Value>
  </ParameterValue>
  <ParameterValue>
    <Name>Quarterback</Name>
    <Value>Kirk Cousins</Value>
  </ParameterValue>
</ParameterValues>