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

htmlagilitypack-does<form>close itself因故?

  •  33
  • mpen  · 技术社区  · 14 年前

    我只是写了这个测试来看看我是不是疯了…

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using HtmlAgilityPack;
    
    namespace HtmlAgilityPackFormBug
    {
        class Program
        {
            static void Main(string[] args)
            {
                var doc = new HtmlDocument();
                doc.LoadHtml(@"
    <!DOCTYPE html>
    <html>
        <head>
            <title>Form Test</title>
        </head>
        <body>
            <form>
                <input type=""text"" />
                <input type=""reset"" />
                <input type=""submit"" />
            </form>
        </body>
    </html>
    ");
                var body = doc.DocumentNode.SelectSingleNode("//body");
                foreach (var node in body.ChildNodes.Where(n => n.NodeType == HtmlNodeType.Element))
                    Console.WriteLine(node.XPath);
                Console.ReadLine();
            }
        }
    }
    

    输出:

    /html[1]/body[1]/form[1]
    /html[1]/body[1]/input[1]
    /html[1]/body[1]/input[2]
    /html[1]/body[1]/input[3]
    

    但是,如果我改变 <form> <xxx> 它给了我:

    /html[1]/body[1]/xxx[1]
    

    (应该如此)。所以…看起来这些输入元素是 包含在窗体内,但直接包含在正文中,好像 <形式& gt; 立即关闭。怎么了?这是虫子吗?


    在挖掘源头时,我发现:

    ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);
    

    它有“空”标志,如meta和img。为什么?形式是最明确的 应该是空的。

    2 回复  |  直到 12 年前
        1
  •  37
  •   MatthewMartin muthu    12 年前

    this workitem

        HtmlNode.ElementsFlags.Remove("form");
    

        2
  •  25
  •   Simon Mourier    12 年前

    <b>bold<i>italic and bold</b>italic</i>

    推荐文章