如何使用HTMLAgilityPack单独删除html标签但不删除内部html或子标签?

时间:2013-08-27 13:56:22

标签: c# html html-agility-pack

我需要在以下代码中删除一个html标记<tbody>

<TABLE>
  <TBODY>
  <TR>    
    <TD></TD>
    <TD></TD>
    <TD></TD></TR>
  <TR>    
    <TD valign="bottom"></TD>
    <TD valign="bottom"></TD>
    <TD valign="bottom"></TD></TR>
  </TBODY>
</TABLE>

我正在使用,

      var document = new HtmlDocument();
      document.LoadHtml(<URL>);
      if (document.DocumentNode.SelectSingleNode("//tbody") != null)
                {
                    document.DocumentNode.SelectSingleNode("//tbody").Remove();
                }

但是它会删除整个 块,而不仅仅是:

感谢您的帮助&amp;时间:)

3 个答案:

答案 0 :(得分:4)

var tbody = document.DocumentNode.SelectSingleNode("//tbody");
tbody.ParentNode.RemoveChild(tbody, keepGrandChildren: true);

<强>输出:

<table>

  <tr>    
    <td valign="bottom"></td>
    <td valign="bottom"></td>
    <td valign="bottom"></td></tr>
  <tr>    
    <td></td>
    <td></td>
    <td></td></tr>

</table>

答案 1 :(得分:1)

内部html是标记的组成部分,这就是为什么内部html也会被删除。

您需要做的是将<tbody>标记替换为<tbody>的内部html,在您的情况下,这样的内容(我没有检查此代码是否有效,但您明白了):

document.DocumentNode.SelectSingleNode("//table").innerHTML = document.DocumentNode.SelectSingleNode("//tbody").innerHTML;

答案 2 :(得分:0)

如果您为标记指定了ID,则应该能够通过id访问该元素。这将使删除变得非常容易。