HtmlAgilityPack - 附加两个节点不起作用
HtmlAgilityPack - appending two nodes does not work
我们正在使用 HtmlAgilityPack ... 尝试将两个节点添加到文档
- 样式节点
- 脚本节点
我们使用以下内容:
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' 变量有问题导致了问题。
我们正在使用 HtmlAgilityPack ... 尝试将两个节点添加到文档
- 样式节点
- 脚本节点
我们使用以下内容:
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' 变量有问题导致了问题。