我正在使用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。
答案 0 :(得分:1)
使用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;
答案 1 :(得分:0)
这是一个相当简单的正则表达式。
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,用于删除标签之间的所有空格。
正则表达式的模式是
Regex.Replace(string, "(>) *(<)", "$1$2");
或者您可以使用“。*”而不是“*”来确定替换所有换行符或标签之间可能剩余的其他特殊字符