Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从C中的链接列表递归创建手风琴html#_C#_Recursion_Html Lists_Html Agility Pack - Fatal编程技术网

C# 从C中的链接列表递归创建手风琴html#

C# 从C中的链接列表递归创建手风琴html#,c#,recursion,html-lists,html-agility-pack,C#,Recursion,Html Lists,Html Agility Pack,我正在抓取一个远程页面的链接,我在一个列表中。我正试图打印出jquery手风琴所需的列表。我的html没有问题,但是我的循环有点不正常,没有正确嵌套 以下是列表的一个示例: <a href="#heading1">Heading 1</a> <a href="link1.html">link1</a> <a href="link2.html">link2</a> <a href="link3.html">link

我正在抓取一个远程页面的链接,我在一个列表中。我正试图打印出jquery手风琴所需的列表。我的html没有问题,但是我的循环有点不正常,没有正确嵌套

以下是列表的一个示例:

<a href="#heading1">Heading 1</a>
<a href="link1.html">link1</a>
<a href="link2.html">link2</a>
<a href="link3.html">link3</a>
<a href="#heading2">Heading 2</a>
<a href="link4.html">link4</a>
<a href="link5.html">link5</a>
<a href="link6.html">link6</a>

下面是我需要如何格式化html的方法:

<div data-role="collapsible" data-collapsed="true">
<h3>Heading 1</h3>
<p>
  <ul>
    <li><a href="link1.html">link1</a></li>
    <li><a href="link2.html">link2</a></li>
    <li><a href="link3.html">link3</a></li>
  </ul>
</p>
</div>
<div data-role="collapsible" data-collapsed="true">
<h3>Heading 2</h3>
<p>
  <ul>
    <li><a href="link4.html">link4</a></li>
    <li><a href="link5.html">link5</a></li>
    <li><a href="link6.html">link6</a></li>
  </ul>
</p>
</div>

标题1

标题2

这是我到目前为止的代码,应该提到的是,我正在使用HTMLAgilityPack:

HtmlNodeCollection OneHome = document.DocumentNode.SelectNodes("//div[@id='accordion1']");
        var OneHomelinks = OneHome.Descendants("a")
                .Select(a => a.OuterHtml)
                .ToList();

        foreach (string link in OneHomelinks)
        {

            if (link.Contains('#'))
            {
                Response.Write("<div data-role=\"collapsible\" data-collapsed=\"true\">");
                Response.Write("<h3>" + link + "</h3>");
                Response.Write("<p>");
                Response.Write("<ul>");
            }

            if (!link.Contains('#'))
            {
                Response.Write("<li>" + link + "</li>");
            } else {
                Response.Write("</ul>");
                Response.Write("</p>");
                Response.Write("</div>");
            }

        }
HtmlNodeCollection-OneHome=document.DocumentNode.SelectNodes(“//div[@id='accordion1']”);
var OneHomelinks=OneHome.substands(“a”)
.选择(a=>a.OuterHtml)
.ToList();
foreach(OneHomeLink中的字符串链接)
{
if(link.Contains('#'))
{
回答。写(“”);
响应。写入(“+link+”);
响应。写入(“”);
响应。写入(“
    ”); } 如果(!link.Contains('#')) { 响应。写(“
  • ”+链接+”
  • ”; }否则{ 响应。写入(“
”); 回答。写(“

”); 回答。写(“”); } }
基本上,我试图通过使用href中的“#”来提取标题,并在该点上重置标题-但是出现了一些问题,列表的格式不正确。在此,我们非常感谢您的帮助

电流输出

<div data-role="collapsible" data-collapsed="true">
<h3>Heading 1</h3>
<p></p>
 <ul></ul>
<p></p>
</div>
<li><a href="link1.html>link1</a></li>
<li><a href="link2.html>link2</a></li>
<li><a href="link3.html>link3</a></li>
<div data-role="collapsible" data-collapsed="true">
<h3>Heading 2</h3>
<p></p>
 <ul></ul>
<p></p>
</div>
<li><a href="link4.html>link4</a></li>
<li><a href="link5.html>link5</a></li>
<li><a href="link6.html>link6</a></li>

标题1

  • 标题2


    • 编辑:逻辑错误,哇

      再次使用逻辑布局编辑2:

      我认为这应该适合你:

      HtmlNodeCollection OneHome = document.DocumentNode.SelectNodes("//div[@id='accordion1']");
          var OneHomelinks = OneHome.Descendants("a")
                  .Select(a => a.OuterHtml)
                  .ToList();
          var headerCount = 0;
          foreach (string link in OneHomelinks)
          {
              var prevCounter = headerCount;
              if (link.Contains('#'))
              {
                  headerCount++;
      
                  if (headerCount != 1 && headerCount > prevCounter) {
                      Response.Write("</ul>");
                      Response.Write("</p>");
                      Response.Write("</div>");
                  }
      
                  Response.Write("<div data-role=\"collapsible\" data-collapsed=\"true\">");
                  Response.Write("<h3>" + link + "</h3>");
                  Response.Write("<p>");
                  Response.Write("<ul>");
      
      
              }
              else {
                  Response.Write("<li>" + link + "</li>");
              } 
          }
          Response.Write("</ul>");
          Response.Write("</p>");
          Response.Write("</div>");
      
      HtmlNodeCollection-OneHome=document.DocumentNode.SelectNodes(“//div[@id='accordion1']”);
      var OneHomelinks=OneHome.substands(“a”)
      .选择(a=>a.OuterHtml)
      .ToList();
      var headerCount=0;
      foreach(OneHomeLink中的字符串链接)
      {
      var prevCounter=总计数;
      if(link.Contains('#'))
      {
      headerCount++;
      if(headerCount!=1&&headerCount>prevCounter){
      响应。写入(“”);
      回答。写(“

      ”); 回答。写(“”); } 回答。写(“”); 响应。写入(“+link+”); 响应。写入(“”); 响应。写入(“
        ”); } 否则{ 响应。写(“
      • ”+链接+”
      • ”; } } 响应。写入(“
      ”); 回答。写(“

      ”); 回答。写(“”);
      what's your current outputsidenote your art=:OCloser-现在它将所有内容包装为单个
        ,并在每次找到标题时将所有内容嵌套到更深的x1级别。我看到我的逻辑位置被复制而不是移动,这次我已真实更新了代码。:)仍然在第一个
          中嵌套所有内容,这里有一个屏幕截图:啊,是的,我想我明白为什么了。再次更新。