使用 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(); });
我有以下 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(); });