HtmlAgilityPack - 附加两个节点不起作用

HtmlAgilityPack - appending two nodes does not work

我们正在使用 HtmlAgilityPack ... 尝试将两个节点添加到文档

  1. 样式节点
  2. 脚本节点

我们使用以下内容:

HtmlNode styleNode = HtmlNode.CreateNode("<style>"+ style + "</style>");
HtmlNode jsNode= HtmlNode.CreateNode("<script>"+ js + "</script>");
page_body.AppendChild(styleNode);
page_body.AppendChild(jsNode);

我们得到的结果是奇怪的,如果我们添加两个节点,那么样式将附加到最终保存的文档,而脚本不是。

但是当我们标记出样式节点时:

// HtmlNode styleNode = HtmlNode.CreateNode("<style>"+ style + "</style>");
HtmlNode jsNode= HtmlNode.CreateNode("<script>"+ js + "</script>");
// page_body.AppendChild(styleNode);
page_body.AppendChild(jsNode);

然后脚本节点被追加和评估就好了...

我们做错了什么?为什么这两个节点不能相处?

...

完整代码

var pageDoc = new HtmlDocument();

var title = page.GetAttributeValue("title", ""); //String.IsNullOrEmpty(title)

var page_head = page.SelectSingleNode("//page-head");
var page_body = page.SelectSingleNode("//page-body");
var page_foot = page.SelectSingleNode("//page-footer");

if (page_head == null) page_head = default_head.Clone();
if (page_foot == null) page_foot = default_foot.Clone();

// fetch and add data

HtmlNode script_node = HtmlNode.CreateNode("<script>" + js_handler + "</script>");
HtmlNode style_node = HtmlNode.CreateNode("<style>" + general_style + style.InnerHtml + "</style>");

page_body.AppendChild(script_node);
page_body.AppendChild(style_node);

HtmlNodeCollection childNodes = page_body.ChildNodes;

foreach (var node in childNodes)
{
    if (node.NodeType == HtmlNodeType.Element)
    {
        Console.WriteLine(node.Name);
    }
}

string html_file = EXPORT_HTML_PATH + token + "_" + page_num + ".html";
string pdf_file  = EXPORT_PDF_PATH  + token + "_" + page_num + ".pdf";

FileStream sw = new FileStream(html_file, FileMode.Create); // specific page count
pageDoc.LoadHtml(page.OuterHtml);
pageDoc.Save(sw);
sw.Close();

你的方法看起来不错,你需要分享完整的方法代码来找到错误。这是一个 fiddle 在那里你可以看到它没问题。可能是您的 'style' 或 'script' 变量有问题导致了问题。

Fiddle which add two tags