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

问题描述 投票:0回答:1

起始代码:

var xDocument = XDocument.Parse(rawXmlString);

想象一下,我已将下面的 XML 加载到 XDocument 中,并且我想使用 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#,分别关闭

Name
Head Coach
Quarterback
,如何替换:

  • Bill Belichick
    Mike Vrabel
  • Mac Jones
    Kirk Cousins

  • 另外,如果有帮助的话,这个 XML 文档将只存在于内存中。它 不会被持久化到文件中。
  • ParameterValues
    确实会是 根节点。
  • ParameterValue
    节点可能会出现故障,有一天 可能有两个以上的子节点。

我尝试过的:

var xDocument = XDocument.Parse(rawXmlString);

我已经尝试过各种 Linq-to-XML 查询方法,但到目前为止运气不佳。

c# xml linq-to-xml
1个回答
3
投票

这里是通过 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>
© www.soinside.com 2019 - 2024. All rights reserved.