C# 将纯文本转换为在p标记中包含i标记

C# 将纯文本转换为在p标记中包含i标记,c#,html,html-agility-pack,C#,Html,Html Agility Pack,我正在使用C#中的HtmlAgilityPack,并且我用纯p-tagless文本呈现。 我已经编写了一个扩展,允许我在p-tagless文本周围添加p标记,但是当我在p-tagless文本中获得textfootext时,它会变成文本foo文本 如何将其转换为: text另一段文本 为此: text另一段文本 这是我的分机: private static readonly string[] unacceptableParents = { "p", "a", "i", "h2", "h3"

我正在使用C#中的HtmlAgilityPack,并且我用纯p-tagless文本呈现。 我已经编写了一个扩展,允许我在p-tagless文本周围添加
p
标记,但是当我在p-tagless文本中获得
textfootext
时,它会变成
文本foo

文本

如何将其转换为:

text另一段文本

为此:

text另一段文本

这是我的分机:

    private static readonly string[] unacceptableParents = { "p", "a", "i", "h2", "h3", "h4", "h5", "h6" };`

    public static HtmlDocument AddPTagAroundTextWithoutTag(this HtmlDocument doc)
    {
        GetXPathOfText(doc, doc.DocumentNode);

        return doc;
    }
    public static void AddPTags(HtmlDocument doc, HtmlNode node)
    {
        var tekstName = "#text";
        if (node.HasChildNodes)
        {
            foreach (var thisNode in node.ChildNodes)
            {
                if (thisNode.ChildNodes.Any())
                {
                    GetXPathOfText(doc, thisNode);
                }
                else if (thisNode.Name == tekstName && !unacceptableParents.Contains(thisNode.ParentNode.Name))
                {
                    thisNode.Name = "p";
                    thisNode.InnerHtml = "<p>" + node.InnerText.Trim() + "</p>";
                }
            }
        }
        else
        {
            if (node.Name == tekstName && !unacceptableParents.Contains(node.ParentNode.Name))
            {
                node.Name = "p";
                node.InnerHtml = "<p>" + node.InnerText.Trim() + "</p>";
            }
        }
    }
private static readonly string[]unacceptableParents={“p”、“a”、“i”、“h2”、“h3”、“h4”、“h5”、“h6”}`
公共静态HtmlDocument AddPTagAroundTextWithoutTag(此HtmlDocument文档)
{
GetXPathOfText(doc,doc.DocumentNode);
退货单;
}
公共静态无效添加标记(HtmlDocument文档,HtmlNode节点)
{
var tekstName=“#text”;
if(node.HasChildNodes)
{
foreach(node.ChildNodes中的var thisNode)
{
if(thisNode.ChildNodes.Any())
{
GetXPathOfText(doc,thisNode);
}
else if(thisNode.Name==tekstName&!unacceptableParents.Contains(thisNode.ParentNode.Name))
{
thisNode.Name=“p”;
thisNode.InnerHtml=“”+node.InnerText.Trim()+”

”; } } } 其他的 { if(node.Name==tekstName&!unacceptableParents.Contains(node.ParentNode.Name)) { node.Name=“p”; node.InnerHtml=“”+node.InnerText.Trim()+”

”; } } }
也许我遗漏了一些东西,但你不能只做
添加标签(doc,doc.DocumentNode)
就这样吗?哈哈哈,你是对的,xD甚至没有注意到,但这并不能修复I标签,这些标签仍然是分开的,在你更改后,它仍然添加了太多
p
标签吗?如果
AddPTags
中的分支
if
可能会删除整个
,而只保留
else
部分?我不明白为什么节点有子节点在这里很重要。这是一个递归函数,所以我有这样一个例子:如果,我给出的带有I标记的示例只是HTML的一部分,它可以是我需要转换的HTML页面。只是,客户端无法在编辑器中添加p标记,所以我需要将所有HTML转换为具有p标记。但是i标记分隔文本,因此它不包括在p标记中,并且它将其作为不同的标记处理