You could simply set the node name based on the current node name.
In the sample below, I have used a dictionary for replacing the node names.
You can use any other logic that you have for replacing the node names as in mapping for original to new.
XDocument doc = XDocument.Parse(@"<SequenceFlow>
<FlowWriteLine> hiiii </FlowWriteLine>
<NotToBeReplaced>byeee</NotToBeReplaced>
</SequenceFlow> ");
Dictionary<string, string> replacements = new Dictionary<string, string>() { { "SequenceFlow", "Workflow" }, { "FlowWriteLine", "WriteLine" } };
foreach (XElement child in doc.Root.DescendantsAndSelf())
{
string replacementValue = string.Empty;
if (replacements.TryGetValue(child.Name.LocalName, out replacementValue))
{
child.Name = replacementValue;
}
}
The above gives an output as
<Workflow>
<WriteLine> hiiii </WriteLine>
<NotToBeReplaced>byeee</NotToBeReplaced>
</Workflow>
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…