Edit 1 gibi bozuk XML/XHTML üretir
if (HtmlNode.ElementsFlags.ContainsKey("img"))
{ HtmlNode.ElementsFlags["img"] = HtmlElementFlag.Closed;}
else
{ HtmlNode.ElementsFlags.Add("img", HtmlElementFlag.Closed);}
Onları düzeltmek için başka bir etiketin yerine "img" ifadesini değiştirin (giriş, seçim ve seçenek sıkça ortaya çıkıyor). Gerektiği kadar tekrarlayın. "Kapalı" ve "boş" bayrakların aynı anda ayarlanmasını engelleyen HAP hatası nedeniyle bunun üretileceğini unutmayın. Kaynak: MikeBridge http://htmlagilitypack.codeplex.com/discussions/53782
Orjinal cevap at: sadece bu konuya çözüm üzerinde zahmetli ve herhangi yeterli cevaplar (Doctype XML olarak Çıktı kullanarak, düzgün ayarlanmış, sözdizimi, AutoCloseOnEnd kontrol edin ve Boş Düğüm seçeneklerini yazın) görmediklerine olması Bunu kirli bir hack ile çözebildim. Bu, kesinlikle sorunu herkese açık olarak çözmeyecektir, ancak oluşturulan html/xml değerini bir dizge olarak döndüren (web hizmeti aracılığıyla EG) basit çözüm, çeviklik paketinin kırılmadığını bildiği sahte etiketler kullanmaktır. . Belgenizde yapmanız gereken her şeyi yapmayı bitirdikten sonra, her etiket için bir baş ağrısına neden olan bir kez aşağıdaki yöntemi çağırın (seçenek, girdi ve img olan dikkate değer örnekler). Hemen sonra, son dizginizi oluşturun ve bir dizeyle (bu durumda "Fix_") önceden eklenmiş her etiket için basit bir değişiklik yapın ve dizginizi döndürün. Bu sanırım edecek bir bahis adam olsaydı, şu anda bir not olarak
private void fixHAPUnclosedTags(ref HtmlDocument doc, string tagName, bool hasInnerText = false)
{
HtmlNode tagReplacement = null;
foreach(var tag in doc.DocumentNode.SelectNodes("//"+tagName)
{
tagReplacement = HtmlTextNode.CreateNode("<fix_"+tagName+"></fix_"+tagName+">");
foreach(var attr in tag.Attributes)
{
tagReplacement.SetAttributeValue(attr.Name, attr.Value);
}
if(hasInnerText)//for option tags and other non-empty nodes, the next (text) node will be its inner HTML
{
tagReplacement.InnerHtml = tag.InnerHtml + tag.NextSibling.InnerHtml;
tag.NextSibling.Remove();
}
tag.ParentNode.ReplaceChild(tagReplacement, tag);
}
}
(çizgisinde bir şey) bulamazsanız başka bir soru önerilen regex çözümü daha Bence sadece marjinal daha iyidir Yukarıdaki MikeBridge'ın cevabı istemeden paketin içindeki bu hatanın kaynağını tanımlar - kapalı ve boş bayrakların karşılıklı olarak özel olmasına neden olan
Ek olarak, biraz daha kazmaya başladım. Bu yaklaşımı almıştır:
Ayrıca, SADECE boş olmayan öğelere ihtiyaç duyduğunuz durumlarda, aynı soruda listelenen çok basit bir düzeltmenin yanı sıra, burada HAP kodekseks tartışması vardır: http://htmlagilitypack.codeplex.com/discussions/14982?ProjectName=htmlagilitypack Bu temelde MikeBridge'in yanıtında listelenen boş bayrak seçeneğini ayarlar. her yerde sürekli olarak.
Bu yöntemle ilgili bir problem, daha önce kodlanmış varlıkların, frenleme alanı olmayan bir alan gibi kodlanmasının, bu istenmeyen davranış olabileceği yönündedir – MJJames