我已经尝试了所有答案来解决这个问题,但它对我不起作用.. 代码就像
HtmlNode.ElementsFlags.Remove("option");
HtmlNode.ElementsFlags.Remove("link");
HtmlNode.ElementsFlags.Remove("meta");
HtmlNode.ElementsFlags.Remove("form");
HtmlDocument html = new HtmlDocument();
HtmlNode.ElementsFlags["input"] = HtmlElementFlag.Empty;
html.OptionWriteEmptyNodes = true;
html.load(file);
var ETagTable = html.CreateElement("table");
ETagTable.InnerHtml = ChangedTagE_Str;
/* where changedtage_str = <tr>
<th>Reference:</th>
<td><input type="text" id="e.reference" size="30" maxlength="32" value="" /></td>
</tr>*/
innerHTML中的输入为<input type="text" id="e.crm_reference" size="30" maxlength="32" value="">
我想要<input type="text" id="e.crm_reference" size="30" maxlength="32" value="" />
请问任何解决方案?
答案 0 :(得分:1)
将OptionWriteEmptyNodes设置为true,修改文档中的html并通过调用LoadHtml()解析生成的html。
HtmlDocument html = new HtmlDocument();
html.OptionWriteEmptyNodes = true;
html.Load("page.htm");
html.DocumentNode.Element("html").Element("body").InnerHtml = "<input type=\"text\" />";
html.LoadHtml(html.DocumentNode.OuterHtml); //Reload the document
如果您使用加载()或 LoadHtml()方法加载外部html,那么Gauthaman建议的内容有效,但在插入新元素或设置时却没有 innerHTML 属性。
我们可以做的是欺骗Agility重新加载文档。
HtmlDocument html = new HtmlDocument();
html.OptionWriteEmptyNodes = true;
html.LoadHtml("<!DOCTYPE html><html><head><title>ttt</title></head><body></body></html>");
var ETagTable = html.CreateElement("table");
html.DocumentNode.Element("html").Element("body").AppendChild(ETagTable);
ETagTable.InnerHtml = "<tr><th>Reference:</th><td><input type=\"text\" size=\"30\""
+"maxlength=\"32\" value=\"\" /></td></tr>";
html.LoadHtml(html.DocumentNode.OuterHtml); //<-- Reload the document
Console.WriteLine(html.DocumentNode.InnerHtml);
答案 1 :(得分:0)
请你试试下面的代码
编辑 - 请检查现在写的
HtmlDocument doc = new HtmlDocument();
doc.OptionWriteEmptyNodes = true;
HtmlNode nodeDiv = doc.CreateElement("div");
nodeDiv.InnerHtml = "<table><tr><th>Reference:</th></tr><tr><td><input type='text' id='e.crm_reference' size='30' maxlength='32' value='' /></td></tr></table>";