使用HTML Agility Pack将整个表单元素获取为字符串

sam*_*mar 4 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>
Run Code Online (Sandbox Code Playgroud)

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

  <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> 
Run Code Online (Sandbox Code Playgroud)

我通常不喜欢问这种用勺子喂食的问题,但是我一直在尝试和搜索,但无法得到答案。

请帮忙!

提前致谢!

Sae*_*ini 5

似乎您在寻找HtmlNode.OuterHtml

//
// Summary:
//     Gets or Sets the object and its content in HTML.
public virtual string OuterHtml { get; }
Run Code Online (Sandbox Code Playgroud)

因此,您只需要选择表单节点并获取其OuterHtml属性即可:

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

更新

HAP如何对待标签似乎有一个非常古老的错误form。也许这是一个功能

无论如何,这是一种解决方法:

HtmlNode.ElementsFlags.Remove("form");
Run Code Online (Sandbox Code Playgroud)

所以这应该工作:

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


归档时间:

查看次数:

1599 次

最近记录:

10 年 前