使用 HtmlAgilityPack 包裹元素?

2024-01-04

我有一个HtmlDocument可能或可能有适当的<head> and <body>部分或者可能只是一个 html 片段。不管怎样,我想通过一个函数来运行它,以确保它具有(更)正确的 html 结构。

我知道我可以通过查看是否有身体来检查它是否有身体

doc.DocumentNode.SelectSingleNode("//body");

一片空白。如果它没有主体,我将如何将 doc.DocumentNode 的内容包装在<body>元素并将其分配回HtmlDocument?

Edit:对于我想要做什么似乎有些困惑。用 jquery 术语来说:

$doc = $(document);
if( !$doc.has('body') ) {
    $doc.wrapInner('body');
}

基本上,如果没有 body 元素,则在所有内容周围放置一个 body 元素。


你可以这样做:

HtmlDocument doc = new HtmlDocument();
doc.Load(MyTestHtm);
HtmlNode body = doc.DocumentNode.SelectSingleNode("//body");
if (body == null)
{
    HtmlNode html = doc.DocumentNode.SelectSingleNode("//html");
    // we presume html exists

    body = CloneAsParentNode(html.ChildNodes, "body");
}


static HtmlNode CloneAsParentNode(HtmlNodeCollection nodes, string name)
{
    List<HtmlNode> clones = new List<HtmlNode>(nodes);
    HtmlNode parent = nodes[0].ParentNode;

    // create a new parent with the given name
    HtmlNode newParent = nodes[0].OwnerDocument.CreateElement(name);

    // insert before the first node in the selection
    parent.InsertBefore(newParent, nodes[0]);

    // clone all sub nodes
    foreach (HtmlNode node in clones)
    {
        HtmlNode clone = node.CloneNode(true);
        newParent.AppendChild(clone);
    }

    // remove all sub nodes
    foreach (HtmlNode node in clones)
    {
        parent.RemoveChild(node);
    }
    return newParent;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 HtmlAgilityPack 包裹元素? 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 对类 static constexpr 结构的未定义引用,g++ 与 clang

    这是我的代码 a cp p struct int2 int x y struct Foo static constexpr int bar1 1 static constexpr int2 bar2 1 2 int foo1 return
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 有没有办法让 doxygen 自动处理未记录的 C 代码?

    通常它会忽略未记录的 C 文件 但我想测试 Callgraph 功能 例如 您知道在不更改 C 文件的情况下解决此问题的方法吗 设置变量EXTRACT ALL YES在你的 Doxyfile 中
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • Ruby before_validation 触发无限循环回调

    产品模型有一个属性 1 如果 attribute 1 需要重新计算 则 before validation 将调用 它给予SystemStackError stack level too deep因为self save 触发before v
  • 如何在两个 MapReduce 作业之间传递变量

    我已经链接了两个 Map reduce 作业 Job1 将只有一个减速器 我正在计算一个浮点值 我想在 Job2 的减速器中使用这个值 这是我的主要方法设置 public static String GlobalVriable public
  • 多个文件的预签名 URL?

    我已经编写了一个实现 用于为 aws s3 上的存储桶生成预签名 URL 它工作得很好 可以获取单个文件 对象 我该如何为整个目录生成预签名 URL 这么说吧 在我的 s3 存储桶上 有多个文件夹 它们都有自己的小型 html5 应用程序
  • 命名空间“System”中不存在类型或命名空间名称“Transactions”[重复]

    这个问题在这里已经有答案了 这是使用 Visual Studio 2013 的 ASP Net Web 应用程序 该解决方案由多个项目组成 我在一个图书馆项目中有代码using System Transactions 几个月来效果很好 今天
  • 如何在 Perl 6 中打开字符串上的文件句柄?

    在 Perl 5 中 我可以像这样打开字符串上的文件句柄 open my kfh lt message gt payload 我有一个使用字符串作为文件句柄并将其传递给open method my fh new IO Zlib open m
  • 是否可以将 proguard 与 Grails 一起使用

    即使不可能对整个 Grails 应用程序使用 proguard 是否可以将其仅用于 src java 文件夹 我不深入了解 Proguard 或 Grails 但我确实知道 Grails 使用 Groovy Groovy 编译为字节码 混淆
  • Capistrano 无法创建符号链接:文件存在

    我有 Rails 4 应用程序和 Capistrano 3 deploy rb set application
  • 加载属性文件 Maven 时出错

    当我尝试从 pom xml 加载过滤器文件时 我从 eclipse 标记中收到此错误 它显示以下消息 Error loading property file src main filters filter properties org ap
  • 使用 matplotlib 并排绘制图像

    我想知道如何使用并排绘制图像matplotlib例如这样的事情 我得到的最接近的是 这是使用以下代码生成的 f axarr plt subplots 2 2 axarr 0 0 plt imshow image datas 0 axarr
  • windows下EOF的值

    我写了这段代码 include
  • Socket.IO:如何删除命名空间

    我需要能够即时构造和破坏 socket io 命名空间 很容易找到如何创建名称空间的信息 但我没有找到有关如何删除 断开名称空间以释放其内存的信息 假设我已经运行了以下代码 var nsp io of my namespace nsp on
  • 将日期保存到 Firebase Firestore Node.js

    我似乎在 Web Javascript 文档中找不到任何有关将日期保存到 Firestore 的信息 在Swift 我使用创建一个变量NSDate然后 Firebase 能够将其作为日期对象存储在数据库中 Node js 中有类似的功能吗
  • 如何在一个 .vtu 文件中写入多个 vtkUnstructedGrid

    我想在一个 vtu 文件中写入多个非结构化网格 我在下面尝试过 MakeHexagonalPrism 和 MakeHexahedron 返回 vtkSmartPointer 类型 结果是输出文件中只有一个非结构化网格 vtkSmartPoi
  • 如果值大于当前值则 MySQL 更新

    我将继续发布我可怕的 MySQL 代码 INSERT INTO monthlystats id server time uptime players rank VALUES 09126 6 0912 302 0 1 ON DUPLICATE
  • Angular Tree Shaking:它到底是如何工作的?

    我们目前正在尝试优化复杂的角度应用程序 性能和捆绑包大小 我们发现我们有部分未使用的组件 但我们不能 100 确定它们 无论如何 我们当前要问的问题是 Angular 中的 Tree Shaking 究竟是如何工作的 问题1 如果模块的声明
  • 从命令行/bash设置VLC音量[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 冒着感觉真的很愚蠢的风险 但我似乎无法从命令行设置 VLC 的音量 vlc file mp3 vol 0 我已阅读手册页并通过谷歌搜索 但
  • Delphi:如何检查文件是否存在(路径超过255个字符)

    我需要让我的 delphi 应用程序能够在路径超过 255 个字符时检查使用 Robocopy 复制的文件是否存在 我尝试过通常的 If FileExists MyFile then 但即使文件存在 它也总是返回 false 我还尝试获取文
  • 如何使用字符串数组值对可序列化字典进行(反)序列化?

    我需要将 C NET Framework 4 5 2 中的类与具有字典属性的 XML 进行 反 序列化string键和string 数组值 我正在使用SerializableDictionary
  • stopPropagation() 在 IE 中不起作用

    在 IE 中遇到一些问题 在 Chrome Opera 等中一切都很好 但在 IE 中我点击并切换类但没有任何反应 我认为实施 cancel bubble 会对我有所帮助 但事实并非如此 以下是 HTML div class title h
  • 使用 HtmlAgilityPack 包裹元素?

    我有一个HtmlDocument可能或可能有适当的 and 部分或者可能只是一个 html 片段 不管怎样 我想通过一个函数来运行它 以确保它具有 更 正确的 html 结构 我知道我可以通过查看是否有身体来检查它是否有身体 doc Doc