c# - 使用 Html Agility Pack 将整个表单元素作为字符串获取

标签 c# html-agility-pack

<分区>

这是我第一次使用 Html Agility Pack 并立即遇到问题。

正如我的标题所暗示的那样,我希望将整个元素作为字符串获取,包括内部元素。

例如下面是我的 html,我正在搜索一个 id 为 aspnetForm

的表单元素
<html>  
<head>  
</head>  
<body>  
  <form name="aspnetForm" id="aspnetForm">
    <div id="div1">  
        <a href="div1-a1">Link 1 inside div1</a>  
        <a href="div1-a2">Link 2 inside div1</a>  
    </div>  
    <a href="a3">Link 3 outside all divs</a>      
    <div id="div2">  
        <a href="div2-a1">Link 1 inside div2</a>  
        <a href="div2-a2">Link 2 inside div2</a>  
    </div> 
  </form> 
</body>  
</html>

我希望输出以下内容(以字符串形式)

  <form name="aspnetForm" id="aspnetForm">
    <div id="div1">  
        <a href="div1-a1">Link 1 inside div1</a>  
        <a href="div1-a2">Link 2 inside div1</a>  
    </div>  
    <a href="a3">Link 3 outside all divs</a>      
    <div id="div2">  
        <a href="div2-a1">Link 1 inside div2</a>  
        <a href="div2-a2">Link 2 inside div2</a>  
    </div> 
  </form> 

我平时不喜欢问这种填鸭式的问题,但我一直在尝试和寻找,却得不到答案。

请帮忙!

提前致谢!

最佳答案

您似乎在寻找 HtmlNode.OuterHtml:

//
// Summary:
//     Gets or Sets the object and its content in HTML.
public virtual string OuterHtml { get; }

所以您只需选择表单节点并获取其 OuterHtml 属性:

HtmlDocument doc = ... // load your HTML
HtmlNode formNode = doc.DocumentNode.SelectSingleNode("//form[@id='aspnetForm']");
string entireElementAsString = formNode.OuterHtml;

更新

似乎有一个very old bug HAP 如何处理 form 标签。或者也许 it's a feature !

无论如何,这里有一个解决方法:

HtmlNode.ElementsFlags.Remove("form");

所以这应该可行:

HtmlNode.ElementsFlags.Remove("form");
HtmlDocument doc = ... // load your HTML
HtmlNode formNode = doc.DocumentNode.SelectSingleNode("//form[@id='aspnetForm']");
string entireElementAsString = formNode.OuterHtml;

关于c# - 使用 Html Agility Pack 将整个表单元素作为字符串获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37438547/

相关文章:

c# - JSON.NET 反序列化

c# - 使用 HTML Agility Pack 提取动态内容

c# - 使用异步任务<ActionResult>对 ASP.NET MVC 5 Controller 进行单元测试

c# - 如何使用 MVVM 在 WP7 中聚焦文本框?

c# - 使用 Html Agility Pack 从网页中的表中获取值而不使用 "SelectNode'

c# - 如何使用 htmlagilitypack 获取 2 个周围 html 元素之间的 html?

c# - HTML Agility Pack 是否包含非托管代码?如果是这样,我的应用程序会遇到问题吗?

c# - SelectSingleNode 为小写

c# - 从 Linq 查询返回 List<string> 返回查询语法而不是值

c# - 是 'method',在给定的上下文错误中无效