HtmlAgilityPack — обеспечение CanOverlap и закрыто в то же время

Как я могу определить, что HtmlNode.ElementsFlags["div"]может CanOverlapи должно быть Closedодновременно?

У меня есть этот HTML (правая struture):

<p>
    <div>
        <b>text:</b> 
        <img alt="" src="#" style="BORDER: 0px solid; ">
    </div>
    <div>
        <b>text:</b> 
        <div></div>
        <div></div>
        <p>text</p>
    </div>
</p>

И мне нужно убедиться, что все теги правильно открыты и закрыты, и я использую HtmlAgilityPackдля этого. Но HtmlAgilityPackменяет мой HTMLпотому что не предполагает теги CanOverlap.

HTML, возвращенный HtmlAgilityPack (неправильная struture):

<p>
   <div>
      <b>text:</b>
      <img alt="" src="#" style="BORDER: 0px solid; " />
   </div>
   <div />
   <b>text:</b>
   <div />
   <div>
        <p>
            text
        </p>
   </div>
</p>

Как я могу это решить? Как я могу сказать HtmlAgilityPackтеги CanOverlapи гарантировать, что теги будут Closed?

Код C#

if (!HtmlNode.ElementsFlags.ContainsKey("p"))
    HtmlNode.ElementsFlags.Add("p", HtmlElementFlag.Closed);
else
    HtmlNode.ElementsFlags["p"] = HtmlElementFlag.Closed;

if (!HtmlNode.ElementsFlags.ContainsKey("span"))
    HtmlNode.ElementsFlags.Add("span", HtmlElementFlag.Closed);
else
    HtmlNode.ElementsFlags["span"] = HtmlElementFlag.Closed;

if (!HtmlNode.ElementsFlags.ContainsKey("div"))
    HtmlNode.ElementsFlags.Add("div", HtmlElementFlag.Closed);
else
    HtmlNode.ElementsFlags["div"] = HtmlElementFlag.Closed;

var htmlDoc = new HtmlDocument();
htmlDoc.OptionFixNestedTags = true;
htmlDoc.OptionWriteEmptyNodes = true;
htmlDoc.LoadHtml(myHtml);

var htmlError = htmlDoc.ParseErrors.SafeAny();

if (!htmlError)
    myHtml = htmlDoc.DocumentNode.InnerHtml;

1 ответ

  1. Решено! Можно сказать HtmlNode.ElementsFlagsдолжно быть Closedи CanOverlapтак:

    if (!HtmlNode.ElementsFlags.ContainsKey("div"))
        HtmlNode.ElementsFlags.Add("div", HtmlElementFlag.CanOverlap & HtmlElementFlag.Closed);
    else
        HtmlNode.ElementsFlags["div"] = HtmlElementFlag.CanOverlap & HtmlElementFlag.Closed;