Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C#.NET中的XDocument library删除内部节点,但不删除xml中的值_C#_.net_Linq To Xml - Fatal编程技术网

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

使用C#.NET中的XDocument library删除内部节点,但不删除xml中的值,c#,.net,linq-to-xml,C#,.net,Linq To Xml,我有以下XML文件: <?xml version="1.0" encoding="utf-8"?> <html> <body> <p><span class="screenitems">Add</span></p> </body> </html> 有没有一种好的/简单的方法可以做到这一点?使用replacetwith,例如 XDocument doc = XDocumen

我有以下XML文件:

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

有没有一种好的/简单的方法可以做到这一点?

使用
replacetwith
,例如

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代码。HTML并不总是有效的XML(请参阅BR标记:

)。这可能会导致异常-因此您应该非常确定HTML是有效的XML(然后可以使用
XDocument
),或者应该使用
Regex.Replace()

Regex spanRegex=newregex(@“]*>([\s\s]*?)]*>”;
Replace(输入,match=>{返回match.Groups[1].ToString();});

(请参阅)

最好使用html agility pack。它应该始终是特定于xml的:D,但感谢使用正则表达式。
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());
}
Regex spanRegex = new Regex(@"<span[^>]*>([\s\S]*?)</span[^>]*>");
spanRegex.Replace(input, match => { return match.Groups[1].ToString(); });