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

时间:2018-12-20 08:56:41

标签: javascript c# html html-agility-pack

我们正在与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();

1 个答案:

答案 0 :(得分:0)

您的方法似乎还可以,您需要共享完整的方法代码才能找到错误。这是一个小提琴,在这里您可以看到它的正常。可能是您的“样式”或“脚本”变量发疯了,从而导致了问题。

Fiddle which add two tags