我需要解析几个html元素,使用html agility pack列出并从文档中删除它们。我写了以下代码:
HtmlDocument doc = new HtmlDocument();
doc.Load(tempFileHTML);
doc.OptionSupportOptionalEndTags = true;
doc.OptionWriteEmptyNodes = true;
List<HtmlNode> tagResolver = doc.DocumentNode.Descendants("link").ToList();
for (int i = 0; i < tagResolver.Count; i++)
{
elements.Add(tagResolver[i].OuterHtml);
tagResolver[i].Remove();
}
doc.Save(tempFileHTML, Encoding.GetEncoding(HTMLtoPDF.DefaultEncoding));
问题是我的启动html文件如下所示:
<table>
<LOOP>
<tr>
<td>{CODE}</td>
</tr>
</LOOP>
</table>
在doc.Save()之后,这个文件看起来像这样:
<table>
<loop>
</loop>
<tr>
<td>{CODE}</td>
</tr>
</table>
有没有办法正确保存这份文件?
答案 0 :(得分:2)
敏捷包中有一些特定的逻辑来强制执行正确的结构。此代码专门针对li
,ul
,table
,tr
等,因此您可能会遇到此问题。请参阅HtmlDocument.GetResetters
方法。使用OptionFixNestedTags
关闭doc.OptionFixNestedTags = false
,应该绕过这种行为。
您应该从我的头顶使用HtmlNode.ElementsFlags.Add
注册您的代码,正确的语法是:
HtmlNode.ElementsFlags.Add("LOOP", HtmlElementFlag.Empty | HtmlElementFlag.Closed);
通过这种方式,您可以定义您希望HtmlAgilityPack解析标记的方式。
另外:还有一个MixedCodeDocument
类,您也可以使用它,这需要您为自己的标记指定一个标记,这样您就可以使用<%loop%>
并且它可以为您。您可以在解析之前在文档上指定TokenStart
和TokenEnd
。