使用C#.NET中的XDocument library删除内部节点,但不删除xml中的值
我有以下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 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(); });