Добавьте несколько дочерних узлов в xml, используя xpath

У меня есть xml, как показано ниже

<ProcessInvoice>
  <ApplicationArea>
    <CreationDateTime>2016-06-01 13:15:36</CreationDateTime>
    <ApplicationGroup>BBEX</ApplicationGroup>
    <MessageType>PROCESSINVOICE</MessageType>
  </ApplicationArea>
</ProcessInvoice>

Теперь у меня есть путь и значение для добавления, но оно динамическое. Это может быть похоже на следующее

path-/ProcessInvoice/ApplicationArea/UserArea/Sample1 
value-001

path-/ProcessInvoice/ApplicationArea/UserArea/UserAreaLine/Sample1 
value-002

если путь присутствует, я должен добавить значение, иначе изменить значение.

Я могу разделить путь и выполнить цикл, чтобы найти, какой узел присутствует и что мне нужно добавить, но я думаю, что может быть более элегантный способ сделать это. Пожалуйста, помогите мне с лучшим подходом для решения этой проблемы?

Изменить примечание. Я предпочитаю XDocument и XElement.

Может я не правильно объяснил. Мой xml и путь к узлу являются динамическими. Может возникнуть ситуация, когда в моем xml отсутствует несколько узлов. Теперь проблема в том, что мне нужно определить, какой узел существует в xml и какие узлы мне нужно создать.

Спасибо


person Subhojit Mukherjee    schedule 15.09.2016    source источник
comment
для каждого UserArea или UserArea/UserAreaLine есть только один узел Sample1?   -  person Zag Gol    schedule 15.09.2016
comment
Да, это правда. пока у нас будет только один узел.   -  person Subhojit Mukherjee    schedule 15.09.2016
comment
узел Sample1 всегда существует?   -  person Zag Gol    schedule 15.09.2016


Ответы (1)


Если узел «Sample1» всегда существует, код будет выглядеть так:

    XmlDocument doc = new XmlDocument();
    doc.Load(FILE);
    var userArea = DocumentElement["ProcessInvoice"]["ApplicationArea"]["UserArea"];

    foreach (XmlNode element in userArea.ChildNodes)
    {
        if (element.Name== "Sample1" )
        {
            XmlNode node == element;
            node.InnerText ="001";
        }
        else if (element.Name == "UserAreaLine")
        {
            XmlNode node == element["Sample1"];
            node.InnerText ="002";
        }

    }
person Zag Gol    schedule 15.09.2016