使用我自己的标签
本文关键字:标签 自己的 我自己 | 更新日期: 2023-09-27 18:10:26
我需要解析一些html元素列表使用html敏捷包,并从文档中删除它们。我写了下面的代码:
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>
有什么方法可以正确保存这个文档吗?
敏捷性包中有一些特定的逻辑来强制执行正确的结构。这个代码专门针对li
, ul
, table
, tr
等,所以你可能会碰到这个。参见HtmlDocument.GetResetters
方法。使用doc.OptionFixNestedTags = false
关闭OptionFixNestedTags
,应该可以避免这种行为。
你应该使用HtmlNode.ElementsFlags.Add
从我的头顶注册你的标签,正确的语法是:
HtmlNode.ElementsFlags.Add("LOOP", HtmlElementFlag.Empty | HtmlElementFlag.Closed);
这样你就可以定义你期望HtmlAgilityPack如何解析你的标记。
还有:您也可以使用MixedCodeDocument
类,它要求您为自己的标记指定一个令牌,这样您就可以使用<%loop%>
,它可能为您提供转义。您可以在解析之前在文档上指定TokenStart
和TokenEnd
。