繁体   English   中英

HtmlAgilityPack用换行符替换段落标签

[英]HtmlAgilityPack replace paragraph tags with linebreaks

我们使用的第三部分导出应用程序将无法正确呈现段落标签(不包括段落之间的多余行),因此我试图使用HtmlAgilityPack将所有段落标签替换为两个换行标签。

这是我到目前为止所拥有的...

// Shortened for this example
string rawHtml = "<p><strong><span>1.0 Purpose</span></strong></p><p><span>The role</span></p><p><span>NOTE: Defined...</span></p>";

HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(rawHtml);
doc.OptionWriteEmptyNodes = true;

// Updated using suggestion from Petr
HtmlNode linebreak = doc.CreateElement("br"); 
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
    HtmlNode childNode = HtmlNode.CreateNode(paragraphTags[i].InnerHtml);
    HtmlNode nextNode = paragraphTags[i];

    if (i > 0)
    {
        nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
        nextNode = doc.DocumentNode.InsertAfter(linebreak, nextNode);
    }
    doc.DocumentNode.InsertAfter(childNode, nextNode);
    paragraphTags[i].Remove();
}

它确实删除了段落标记,但仅呈现一个换行符。 我已经在互联网上搜索了尽可能多的内容,但似乎没有任何效果。

OuterHtml看起来像这样。

<strong><span>1.0 Purpose</span></strong><br /><span>The role</span><br /><span>NOTE: Defined...</span>

知道我在做什么错吗? 我觉得有一种更简单的方法,对吗?

弄清楚了。 向Petr和Simon提出建议。 关键似乎是我需要两个不同的换行节点。

string rawHtml = "<p><strong><span>1.0 Purpose</span></strong></p><p><span>The role</span></p><p><span>NOTE: Defined...</span></p>";

HtmlDocument doc = new HtmlDocument();
HtmlNode.ElementsFlags["br"] = HtmlElementFlag.Empty;
doc.LoadHtml(rawHtml);
doc.OptionWriteEmptyNodes = true;

HtmlNode linebreak1 = doc.CreateElement("br");
HtmlNode linebreak2 = doc.CreateElement("br");
var paragraphTags = doc.DocumentNode.SelectNodes("p");
for (int i = 0; i < paragraphTags.Count; i++)
{
    if (i > 0)
    {
        doc.DocumentNode.InsertBefore(linebreak1, paragraphTags[i]);
        doc.DocumentNode.InsertBefore(linebreak2, paragraphTags[i]);
    }
    doc.DocumentNode.InsertBefore(HtmlNode.CreateNode(paragraphTags[i].InnerHtml), paragraphTags[i]);
    paragraphTags[i].ParentNode.RemoveChild(paragraphTags[i]);
}

如果您使用有帮助吗

HtmlNode linebreak = doc.CreateElement("br");

创建换行节点?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM