如何在不丢失 C# 数据的情况下删除 XML 中的特定标记
本文关键字:XML 删除 情况下 数据 | 更新日期: 2023-09-27 18:34:54
我正在使用c#处理XML文档。
<data>
<single>
<p xmlns="http://www.w3.org/1999/xhtml">
<strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
</p>
<p xmlns="http://www.w3.org/1999/xhtml">
<strong>dmcdnsbcdbn</strong>
</p>
</single>
<single>
<div xmlns="http://www.w3.org/1999/xhtml">
<strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
</div>
<span xmlns="http://www.w3.org/1999/xhtml">
<strong>dmcdnsbcdbn</strong>
</span>
</single>
</data>
我想删除所有<p>
、<div>
和<span>
标签。
所需输出:
<data>
<single>
<strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
<strong>dmcdnsbcdbn</strong>
</single>
<single>
<strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
<strong>dmcdnsbcdbn</strong>
</single>
</data>
任何人都可以建议如何使用 C# 来做到这一点。 使用 XmlDocument。
使用 HtmlAgilityPack,可以按如下方式完成:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(xml);
doc.DocumentNode
.Descendants("strong")
.ToList().ForEach(n => n.ParentNode.ParentNode.RemoveChild(n.ParentNode, true));
var newXml = doc.DocumentNode.InnerHtml;
这是一个
看起来相当简单的正则表达式。
string tmp = xmlDoc.DocumentElement.InnerXml;
tmp = Regex.Replace(tmp, "<p.*>|</p>|<div.*>|</div>|<span.*>|</span>", "");
XmlDocument newDoc = new XmlDocument();
newDoc.LoadXml(tmp);
这将保留数据(标签之间的所有内容(,但删除标签本身。 注意:这可能会弄乱文档中的某些格式(大量空格(,但它仍然应该可用。
在您给出的示例上运行此语句后,这是输出。
<data>
<single>
<strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
<strong>dmcdnsbcdbn</strong>
</single>
<single>
<strong>Hi hello bbvahvgxvzhavxhgsavxv</strong>
<strong>dmcdnsbcdbn</strong>
</single>
</data>
我不确定您是否喜欢,您可能想运行.Trim((,甚至是辅助正则表达式,旨在在尝试加载之前删除字符串上标签之间的所有空格。
正则表达式模式将是
Regex.Replace(string, "(>) *(<)", "$1$2");
或者,您可以使用".*"而不是"*"来确保替换所有换行符或标签之间可能残留的其他特殊字符