删除 C# 中的某些 HTML 标记
Posted
技术标签:
【中文标题】删除 C# 中的某些 HTML 标记【英文标题】:Remove Certain HTML tags in C# 【发布时间】:2021-06-13 11:18:56 【问题描述】:我正在尝试删除 C# 中的某些 html 标签,如下所示:
<div>
<blockquote style="font-size: 30px" >
For 50 years, WWF has been protecting the future of nature. The world's leading conservation organization, WWF works in 100 countries and is supported by 1.2 million members in the United States and close to 5 million globally.
</blockquote>
</div>
作为结果
<div>For 50 years, WWF has been protecting the future of nature. The world's leading conservation organization, WWF works in 100 countries and is supported by 1.2 million members in the United States and close to 5 million globally.</div>
到目前为止,我正在尝试使用正则表达式。 (<.+?)\s+style\s*=\s*([""']).*?\2(.*?>)
但这仅用于删除样式,但我不确定如何才能达到我想要的结果。
谢谢!
【问题讨论】:
你的标准是什么?在这种情况下,“组织,...”可能因内容而异,那么如何剪切文本? 问候@SeaBean 我更新了这个问题。很抱歉造成混乱 这能回答你的问题吗? Using C# regular expressions to remove HTML tags 但是我需要有一种方法来删除某个标签的html标签,例如,它是<blockquote>
使用 XML 解析器。将 text-node 上移一级,移除 blockquote 节点,保存,完成。
【参考方案1】:
据我所知,您希望删除包含 style
属性的 HTML 元素,同时删除它们的结束对。不幸的是,使用正则表达式没有很好的方法来做到这一点。如果没有 'also remove their closing pairs' 子句,我们可以编写一个大致不错的正则表达式。
另一方面,XSLT
是正确的工具,因为它可以处理 XML 的递归性质:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="//*[not(@style)]">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
这里发生了什么? <xsl:template match="//*[not(@style)]">
部分匹配没有 style
属性的所有内容。然后<xsl:copy>...</xsl:copy>
部分完全复制它们。 IE。具有style
属性的项目,它们将不会被复制。
为了记录,这是 XSLT 身份转换的一个轻微变体:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
【讨论】:
以上是关于删除 C# 中的某些 HTML 标记的主要内容,如果未能解决你的问题,请参考以下文章
从 Python 字符串中删除不在允许列表中的 HTML 标记
在 C# 字符串中的 HTML 中搜索特定文本并标记文本的最佳方法是啥?
除了某些指定的内容之外,如何删除PHP中包含内容的所有标记?