使用 C# .NET 中的 XDocument 库删除内部节点但不删除 xml 中的值

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

我有以下 XML 文件:

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

我希望它删除 <span> 节点但 Add 存在,所以最后看起来如下:

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

有good/simple方法吗?

使用ReplaceWith,例如

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

备注:你的 XML 看起来像 HTML-Code。 HTML 并不总是有效的 XML(请参阅 BR-Tag:<br>)。这可能会导致异常 - 所以你应该非常确定你的 HTML 是一个有效的 XML(然后你可以使用 XDocument)或者你应该使用 Regex.Replace()

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

(参见 http://regexr.com/3cjuq