alperc
alperc

Reputation: 383

Delete an inner node but not the value in xml with XDocument library in C# .NET

I have the following XML file:

<?xml version="1.0" encoding="utf-8"?>
<html>
  <body>
    <p><span class="screenitems">Add</span></p>
  </body>
</html>

I Want it to delete <span> node but the Add to exist, so it looks as follows at the end:

<?xml version="1.0" encoding="utf-8"?>
<html>
  <body>
    <p>Add</p>
  </body>
</html>

Is there a good/simple way to do this?

Upvotes: 2

Views: 92

Answers (2)

myst3rium
myst3rium

Reputation: 156

Remark: Your XML looks like HTML-Code. HTML is not always a valid XML (see the BR-Tag: <br>). That might cause exceptions - so you either should be very sure that your HTML is a valid XML (then you can use XDocument) or you should use Regex.Replace()

Regex spanRegex = new Regex(@"<span[^>]*>([\s\S]*?)</span[^>]*>");
spanRegex.Replace(input, match => { return match.Groups[1].ToString(); });

(see http://regexr.com/3cjuq)

Upvotes: 1

Martin Honnen
Martin Honnen

Reputation: 167716

Use ReplaceWith, e.g.

XDocument doc = XDocument.Load("file.xml");
XElement span = doc.Descendants("p").First().Elements("span").FirstOrDefault(s => (string)s.Attribute("class") == "screenitems");
if (span != null) 
{
  span.ReplaceWith(span.Nodes());
}

Upvotes: 4

Related Questions