HtmlAgilityPack ——
是否会因某种原因自行关闭?

2023-11-26

我只是写了这个测试来看看我是否疯了......

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> to <xxx>它给了我:

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

(正如它应该)。所以......看起来那些输入元素是not包含在形式内,但直接在身体内,就好像<form>就立即关闭了。那是怎么回事?这是一个错误吗?


深入研究源码,我发现:

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

它有“空”标志,就像 META 和 IMG 一样。为什么??表格绝对是not应该是空的。


这也被报道在这个工作项。它包含 DarthObiwan 建议的解决方法。

您可以更改此设置而无需重新编译。 ElementFlags 列表是 HtmlNode 类的静态属性。可以使用以下命令将其删除

    HtmlNode.ElementsFlags.Remove("form");

在进行文档加载之前

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HtmlAgilityPack —— 是否会因某种原因自行关闭? 的相关文章

随机推荐

  • ajax成功后重新加载数据表

    我使用 JQuery 数据表 我在ajax成功时将数据发送到json文件中的数据表onclick 第一次单击一切都很好 但下一次单击我只得到正确的数据和dataTables info的错误值 它始终显示dataTables info的第一个
  • std::条件编译时分支评估

    编译这个 template lt class T class Y class Args gt struct isSame static constexpr bool value std conditional lt sizeof Args
  • Apache Solr java 教程 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我是 Apache sol
  • POST/PUT Json RESTful 请求 Grails 的问题

    嗨 我有一个 grails 宁静的代码 我完善了一个 Json 获取和删除请求 我的问题是 我想使用 json 执行 Put 或 post 请求 但如果我使用程序来执行此操作 它会出现错误 我无法执行此操作 这是我的代码 一类 packag
  • jquery masonry 在初始页面加载时崩溃,单击“主页”菜单按钮后工作正常

    我的 jquery masonry 设置在初始页面加载时工作得很奇怪 似乎将图像放置在第一行中 第二行的位置与第一行重叠 第三行的位置相同 页面加载后 您可以单击主页按钮或徽标并重新加载页面 它可以正常工作 我在functions php中
  • ASP.NET XML 解析错误:找不到元素行号 1,列 1 错误

    嘿 我发现了一个奇怪的喜怒无常的页面 它随机地给我以下错误 XML Parsing Error no element found Location http kj2011 site 2011 nonprofit database overv
  • Linq To Sql 和全文搜索 - 可以做到吗?

    有没有人想出一种执行全文搜索的好方法 FREETEXT CONTAINS 对于使用标准 LinqToSql 查询语法的任意数量的任意关键字 我显然希望避免必须使用存储过程或必须生成动态 SQL 调用 显然 我可以将搜索字符串输入到使用 FR
  • 如何在某些元素上禁用 Cufon?

    我目前在您的网站上使用 Cufon 其类似于Cufon set fontFamily DIN Medium replace h1 现在 对于单个 H1 标签 我希望禁用 Cufon 这不会将 H1 标签更改为任何其他标签 它必须保持原样 如
  • Delphi非对称加密

    我正在寻找非对称加密算法的 Delphi 实现 而不依赖于外部 DLL 有可用的吗 我的目标是使用公钥 私钥对加密 解密字符串 或字节数组 安全黑盒Eldos 提供原生 全面的解决方案 包括证书管理和对外部加密设备 即 USB 令牌 的访问
  • 在 Android 中以管理员身份禁用应用程序之前需要密码

    我正在开发一个作为Admin 我可以使用以下代码来做到这一点 演示 DeviceAdminReceiver jav public class DemoDeviceAdminReceiver extends DeviceAdminReceiv
  • 使用 Bouncy Castle 签署 CSR

    我找不到任何描述如何使用 BC 签署 CSR 的代码 文档 作为输入 我有一个 CSR 作为字节数组 并且希望获得 PEM 和 或 DER 格式的证书 我已经走到这一步了 def signCSR csrData Array Byte ca
  • View 被推出 ConstraintLayout 中的约束

    我有一个约束布局与图像视图和 3 个链式文本视图 with a spread inside链条款式
  • R:将“特殊”字母转换为UTF-8?

    我在匹配表时遇到问题 其中一个数据帧包含特殊字符 而另一个数据帧不包含特殊字符 示例 做 安娜县 vs 多纳安娜县 这是一个可以重现输出的脚本 library tidyverse library acs tbl df acs fips pl
  • C++11 初始值设定项列表失败 - 但仅限于长度为 2 的列表

    我发现了一个不起眼的日志记录错误 因为长度为 2 的初始值设定项列表似乎是一个特殊情况 这怎么可能 该代码是使用 Apple LLVM 版本 5 1 clang 503 0 40 编译的 使用CXXFLAGS std c 11 stdlib
  • 如何在 SQLAlchemy 中使用 joinload/contains_eager 来实现启用查询的关系(lazy='dynamic' 选项)

    我有 SQLAlchemy 声明的以下模型类 class User Base id Column Integer primary key True name Column String nullable False unique True
  • 在 Matplotlib 中以科学记数法显示第一个小数位

    我目前正在使用 y 轴的科学记数法生成不同的数字 导致某些图上的刻度为 2 或 6 而另一些图上的刻度为 2 5 或 8 9 我希望 y 轴上始终保留一位小数的刻度 即使它添加了零 这是一个例子 import matplotlib pypl
  • 了解 Python 配置文件输出

    我正在尝试使用 Python 分析器来加速我的代码 我已经能够确定几乎所有时间都花在哪个特定函数上 但我无法弄清楚该函数中的时间花在哪里 下面是配置文件输出 其中显示 appendBallot 是罪魁祸首 耗时近 116 秒 下面 我有 a
  • 如何在Linux内核设备驱动程序中使用定时器?

    我想在 Linux 设备驱动程序中实现一个计数器 该计数器在每个固定时间间隔后递增 我想在计时器的帮助下做到这一点 示例代码片段将非常有用 看看下面的文章IBM Developerworks 计时器和列表 有一个如何使用 Linux 内核定
  • Swift 中忽略参数的用途是什么

    在 Swift 中 您可以编写以下内容 func foo Int gt return 1 其中下划线是被忽略的参数 我只是因为文档才知道这一点 但想不出任何关于为什么你会这样做的用例 我错过了什么吗 在以下情况下 忽略参数 或元组的成员 它
  • HtmlAgilityPack —— 是否会因某种原因自行关闭?

    我只是写了这个测试来看看我是否疯了 using System using System Collections Generic using System Linq using System Text using HtmlAgilityPac