代码之家  ›  专栏  ›  技术社区  ›  uriDium

去掉HTML标记,但使用HTML敏捷性保留内部文本?

  •  2
  • uriDium  · 技术社区  · 15 年前

    <p>Here is some <span class='highlite'>awesome</span> example.</p>
    

    Html敏捷性将此转换为3个节点。文本节点、跨距和文本。我想用这个创建一个标签。所以看起来像

    <p>Here is some awesome example.</p>
    

     //Stip all retarded hilite tags
     var hiliteTags = from tags in doc.DocumentNode.SelectNodes("//span[@class='hilite']")
                      select tags;
    
     foreach (var tag in hiliteTags)
     {
          tag.ParentNode.RemoveChild(tag, true);
     }
    

    但结果是,文本节点,文本节点,文本节点。我想要一个文本节点。然后我试着用

    Node.InnerText += someVariable;
    

    但是内部文本,不管文档上说什么是只读的。

    有什么办法吗?

    第二,当我问的时候,有没有一种方法可以去掉只包含文本的节点,而且它是一个节点。我对此一点都不感兴趣,它只是妨碍了解析,使解析变得很尴尬。我也希望能把它们移走。例如

    <tr>
        <td>Foo</td>
        <td>Bar</td>
    </tr>
    

    Node (tr)
    Node (\r\n)
    Node (td- Foo)
    Node (\r\n)
    Node (td - Bar)
    Node (\r\n)
    Node (tr)
    

    我正在努力选择这些节点。我试过使用Linq,也试过使用XPath。我只是不能把它们移走。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Rohit Agarwal    15 年前

    如果你把 标记模板

    var root = HtmlNode.CreateNode("<root></root>");
    foreach (var node in doc.DocumentNode.SelectNodes("/p"))
    {
        var newNode = HtmlNode.CreateNode(string.Format("<p>{0}</p>", node.InnerText));
        root.AppendChild(newNode);
    }
    

    这有用吗?

    推荐文章