我只是寫了這個測試,看看我是不是瘋了...HtmlAgilityPack - <form>由於某種原因關閉了嗎?
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]
(因爲它應該)。所以...它看起來像那些輸入元素不是包含在窗體內,而是直接在正文內,好像<form>
立即關閉它自己。那是怎麼回事?這是一個錯誤?
通過源挖掘,我看到:
ElementsFlags.Add("form", HtmlElementFlag.CanOverlap | HtmlElementFlag.Empty);
它有 「空」 的標誌,像META和IMG。爲什麼??形式肯定是而不是應該是空的。
出於好奇,它仍然表現得如果你給窗體一個動作和方法? – 2010-11-18 19:54:43
@Marc:那個想法也發生在我身上,是的,它的行爲依然如此。 – mpen 2010-11-18 19:56:29
@Mark - 它*聽起來像它可能是一個錯誤,然後......它*當然*似乎與預期相反。 – 2010-11-18 19:59:36