簡體   English   中英

從HTML字符串中刪除字符串的父標簽,直到其結束標簽

[英]Removing a parent tag of a string until his closing tag from Html string

我有一個很長的字符串,我要做的是從該字符串的<tr>父標簽到其結束標簽</tr>刪除該字符串中的一部分。 (希望我很清楚)。

因此,當我使用文本“ Search Integration”調用方法RemoveSection時


之前的HTML

  <tr>
    <td class=\"SectionHeaderHolder\" colspan=\"4\">
    <p class=\"SectionHeader\">Header XX<span class=\"help\">Help</span></p>
    </td>
    </tr>

    <tr>
    <td class=\"SectionHeaderHolder\" colspan=\"4\">
    <p class=\"SectionHeader\">Search Integration<span class=\"help\">Help</span></p>
    </td>
    </tr>

    <tr>
    <td class=\"SectionHeaderHolder\" colspan=\"4\">
    <p class=\"SectionHeader\">Header YY<span class=\"help\">Help</span></p>
    </td>
    </tr>

  • Remove函數獲取的字符串將在<p class=\\"SectionHeader\\">
  • 該字符串將只有一個部分,因此第一次出現應由remove函數處理。

之后的HTML

 <tr>
    <td class=\"SectionHeaderHolder\" colspan=\"4\">
    <p class=\"SectionHeader\">Header XX<span class=\"help\">Help</span></p>
    </td>
    </tr>

    <tr>
    <td class=\"SectionHeaderHolder\" colspan=\"4\">
    <p class=\"SectionHeader\">Header YY<span class=\"help\">Help</span></p>
    </td>
    </tr>

您可以為此使用HtmlAgilityPack 一個簡單的LinqPad示例:

void Main()
{
    string input = "<tr><td class=\"SectionHeaderHolder\" colspan=\"4\"><p class=\"SectionHeader\">Header XX<span class=\"help\">Help</span></p></td></tr>"
                + "<tr><td class=\"SectionHeaderHolder\" colspan=\"4\">    <p class=\"SectionHeader\">Search Integration<span class=\"help\">Help</span></p>    </td>    </tr>"
                + "<tr><td class=\"SectionHeaderHolder\" colspan=\"4\">    <p class=\"SectionHeader\">Header YY<span class=\"help\">Help</span></p>    </td>    </tr>";

    HtmlDocument doc = new HtmlDocument();
    doc.LoadHtml(input);

    doc.DocumentNode.SelectSingleNode("//p[text()='Search Integration']").ParentNode.ParentNode.Remove();

    string output = doc.DocumentNode.OuterHtml;

    input.Dump();
    output.Dump();
}

雖然我仍然會推薦可接受的解決方案,但是可以使用純正則表達式來完成同樣的事情

string search = "Search Integration";

string pattern = "<tr(?:(?!/?<tr).)*" + search + "(?:(?!/?tr).)*/tr>";
Regex r = new Regex(pattern, RegexOptions.Singleline);
string result = r.Replace(text, "");

演示: https : //dotnetfiddle.net/OcV6E5

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM