【问题标题】:How to Update a Specific Child Node Value of XML Document in C#如何在 C# 中更新 XML 文档的特定子节点值
【发布时间】:2020-01-18 09:23:14
【问题描述】:

我有一个类似下面的方法,我从另一个方法获取所有参数值,其中

    type = DeviceParameters
    sourceXml = <?xml version="1.0" encoding="utf-16"?>
            <ProductCode>
              <DeviceParameters>
                <P65>True</P65>
                <HWVersion>1</HWVersion>
                <Test>Test</Test>
                <Test>hello</Test>
              </DeviceParameters>
              <FirmwareGates>
                <Firmware>120.0.23</Firmware>
              </FirmwareGates>
              <ModemIncludeList>
                <Modem>Test</Modem>
                <ModemFirmware>2</ModemFirmware>
              </ModemIncludeList>
            </ProductCode>
    oldParameterName= Test
    oldParameterValue= hello
    newParameterName = Test
    parameterValue = hello123

我正在尝试将节点&lt;Test&gt;hello&lt;/Test&gt;的值更新为&lt;Test&gt;hello123&lt;/Test&gt;

编辑: 我试图删除参数并使用新值读取,但似乎更困难。有什么方法可以更新值吗?

private string EditParameter(TesterParameterCodeType type, string sourceXml, string oldParameterName, string oldParameterValue, string newParameterName, string parameterValue, int index)
            {
XDocument doc = XDocument.Parse(sourceXml); // or XDocument.Parse(string)
            doc.Root.Descendants().Where(e => e.Name == oldParameterName && e.Value == oldParameterValue).Remove();           

                var stringWriter = new StringWriter();
                doc.Save(stringWriter);
                return stringWriter.ToString();
        }

【问题讨论】:

  • 这能回答你的问题吗? Removing XML node
  • 对不起,我找不到那个源 XML,它似乎不能解决我的问题
  • 你能分享一下TesterParameterCodeType是什么吗?
  • 它是一个枚举,这里是我的枚举值是 DeviceParameters 和它的一个字符串。

标签: c# xml


【解决方案1】:

要使 InnerText 属性在自动完成中可用,只需更改使用正确类型的节点变量

foreach (XmlElement node in parameterNode)

要删除您的节点,只需选择您节点的父节点并从父节点中删除当前节点:

if(node.InnerText == parameterValue)
{
    var parentNode = node.ParentNode;
    parentNode.RemoveChild(node);
}

您可以在此链接中查看完整的 conde 示例:

https://dotnetfiddle.net/2Fe2ss

【讨论】:

  • 谢谢@Lutti Coelho 你能告诉我如何删除那个vale 是hello 的节点吗?我的意思是在我的 if 块中我应该写什么?
  • 我用RemoveChild 示例更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多