【问题标题】:How to delete a html tag alone but not inner html or children tag using HTMLAgilityPack?如何使用 HTMLAgilityPack 单独删除 html 标签而不是内部 html 或子标签?
【发布时间】:2013-08-27 13:56:22
【问题描述】:

我需要在下面的代码中删除一个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();
                }

但它会删除整个 块而不是单独删除:(

感谢您的帮助和时间:)

【问题讨论】:

  • 您不能从元素中删除标签!删除元素会删除标签以及内容。那么你想要达到什么目的呢?你知道,HTML 中的表格确实需要它们的 tbodies。通过将表格行直接放在表格中,您会创建一个不符合标准的 DOM 树。

标签: c# html html-agility-pack


【解决方案1】:
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>

【讨论】:

  • 如果此命令不可用,您将存储父节点,存储子节点,删除要删除的节点,然后将子节点添加回已删除节点的父节点。跨度>
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    如果你给你的标签一个id,你应该能够通过id访问元素。这将使它超级容易删除。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-23
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多