Предполагая простой путь, и вы просто хотите добавить некоторые данные в его конец.
Начиная с некоторых примеров данных:
var xml = XDocument.Parse(@"<?xml version=""1.0""?>
<messages>
<request type=""MSG"">
<header>
<datestamp>2019-02-26T14:49:41+00:00</datestamp>
<source>1</source>
</header>
<body>
<title>Hi there</title>
</body>
</request>
</messages>
");
Это не будет работать, потому что узел продукта не существует:
xml.XPathSelectElement("/messages/request/body/product")
?.Add(new XElement("description", "A new product"));
Для этого вы можете определить свой собственный метод расширения:
public static class extensionMethods
{
public static XElement FindOrAddElement(this XContainer xml, string nodeName)
{
var node = xml.Descendants().FirstOrDefault(x => x.Name == nodeName);
if (node == null)
xml.Add(new XElement(nodeName));
return xml.Descendants().FirstOrDefault(x => x.Name == nodeName);
}
}
И соедините их вместе, чтобы создать свой новый путь.
xml.FindOrAddElement("messages")
.FindOrAddElement("request")
.FindOrAddElement("body")
.FindOrAddElement("product")
?.Add(new XElement("description", "A new product"));