使用我自己的标签

本文关键字:标签 自己的 我自己 | 更新日期: 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%>,它可能为您提供转义。您可以在解析之前在文档上指定TokenStartTokenEnd