2013-10-24 87 views
0

我有以下列出的HTML片段:从html代码片段中剥离href的最佳方式是什么?

<p>​<a href=\"/es-es/Documents/test.txt\"><img class=\"ms-asset-icon ms-rtePosition-4\" src=\"/_layouts/15/images/ictxt.gif\" alt=\"\" />test.txt</a><a href=\"/es-es/Documents/test%20-%20Copy.txt\"><img width=\"16\" height=\"16\" class=\"ms-asset-icon ms-rtePosition-4\" src=\"/_layouts/15/images/ictxt.gif\" alt=\"\" />test - Copy.txt</a><a href=\"/es-es/Documents/test%20-%20Copy%20(2).txt\"><img width=\"16\" height=\"16\" class=\"ms-asset-icon ms-rtePosition-4\" src=\"/_layouts/15/images/ictxt.gif\" alt=\"\" />test - Copy (2).txt</a></p> 

这个网站是一个字符串。我需要从所有链接中删除hrefs,但不知道如何解决这个问题。

注:我离开的字符串是,这就是为什么它不能在多行代码格式化...

+1

定义“最佳”。易于实施?最佳运行时间性能? –

+0

最好的整体方法,这是很好的运行时间性能和易于实现... –

+0

只是'HREF'还是'src'? HtmlAgilityPack可能是您在完成所有工作后正在挖掘的答案。 –

回答

1

试试这个。您可以使用XML操作轻松实现预期结果。

string s = "<p>​<a href=\"/es-es/Documents/test.txt\"><img class=\"ms-asset-icon ms-rtePosition-4\" src=\"/_layouts/15/images/ictxt.gif\" alt=\"\" />test.txt</a><a href=\"/es-es/Documents/test%20-%20Copy.txt\"><img width=\"16\" height=\"16\" class=\"ms-asset-icon ms-rtePosition-4\" src=\"/_layouts/15/images/ictxt.gif\" alt=\"\" />test - Copy.txt</a><a href=\"/es-es/Documents/test%20-%20Copy%20(2).txt\"><img width=\"16\" height=\"16\" class=\"ms-asset-icon ms-rtePosition-4\" src=\"/_layouts/15/images/ictxt.gif\" alt=\"\" />test - Copy (2).txt</a></p>"; 
var xdoc = XDocument.Parse(s); 
      xdoc.Descendants("a") 
      .Attributes("href") 
      .Remove(); 
     Console.WriteLine(xdoc.ToString()); 
+0

因为我想让hrefs不删除它们,我使用了这部分代码:var xdoc = XDocument.Parse(s) 。.Descendants( “A”)的属性( “HREF”); –

+0

因为'img'标签是XHtml,所以应该没问题。如果你的输入不能保证是一个XHtml片段,这不是一个通用的答案,因为HTML'img'标签不是自封闭的。 (其他许多人)。 –

+0

@TetsujinnoOni当然,但我专注于解决OP的具体问题,而不是一个可以在任何地方使用的广义答案,尽管它适用于格式良好的xml –

0

你可以使用AttributeCollection.Remove方法

YourLink.Attributes.Remove("href"); 
+0

如果它不在原始字符串中,那会很好。 –

+0

ya,但在执行任何后续步骤之前,不应要求他提取链接并将其存储在变量中吗?我的意思是,替代方法是开始regexing字符串,并且我们都知道这是多么优雅... – Kristian

0

可你只是将其替换为正则表达式?

string newString = Regex.Replace(oldString, @"<a href[^>]+>", @""); 
1

HtmlAgilityPack是分析和操作HTML最值得推荐的工具。

有些开始代码看起来像以下(更多样本一个搜索的距离):

var htmlDoc = new HtmlAgilityPack.HtmlDocument(); 
htmlDoc.LoadHtml(htmlString); 
var aNodesWithHref = htmlDoc.DocumentNode.SelectNode("//a[@href]"); 
相关问题