Как обновить значение дочернего узла Specifi c в XML Документ в C# - PullRequest
1 голос
/ 17 января 2020

У меня есть метод, подобный ниже, где я получаю все значения параметра из другого метода, где

    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

Я пытаюсь обновить значение для узла <Test>hello</Test> до <Test>hello123</Test>

РЕДАКТИРОВАТЬ: Я пытался удалить параметр и чтения с новым значением, но это кажется более сложным. Есть ли способ обновить значение?

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

1 Ответ

1 голос
/ 17 января 2020

Чтобы сделать свойство InnerText доступным в режиме автозаполнения, просто измените его, указав правильный тип переменной вашего узла

foreach (XmlElement node in parameterNode)

Чтобы удалить узел в вашем случае, просто выберите родителя Вы нодируете и удаляете текущий узел из родительского:

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

Пример полной кондеции вы можете увидеть по этой ссылке:

https://dotnetfiddle.net/2Fe2ss

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...