0

我正在尝试在 Html 字符串中使用 HtmlAgilityPack 替换一些文本并放置 ASP.net 用户控件,但我在输出 html 中变得小写。任何想法如何获得原始案例输出。

代码 :

        public static string ConvertPageTitlesToCMSTitle(string htmlstring, string themeSlug)
        {
            var htmlDoc = new HtmlAgilityPack.HtmlDocument()
                {
                    OptionOutputOriginalCase = true,
                    OptionWriteEmptyNodes = true
                };

            htmlDoc.LoadHtml(htmlstring);

            var stPageTitleTags = htmlDoc.DocumentNode.SelectNodes("//stpagetitle");

            foreach (var stPageTitleTag in stPageTitleTags)
            {
                var pageTitle = Strings.StripHTML(stPageTitleTag.InnerText);
                pageTitle = pageTitle.Trim();

                var pageId = CreateUpdateContentPageInDb(pageTitle, themeSlug, null, null);

                var widgetControl = string.Format("<widget:PageTitleDisplay runat=\"server\" PageId=\"{0}\" Editable=\"True\" />", pageId);

                htmlDoc.DocumentNode.InnerHtml = htmlDoc.DocumentNode.InnerHtml.Replace(stPageTitleTag.OuterHtml, widgetControl);
            }

            return htmlDoc.DocumentNode.OuterHtml;
        }

在此处输入图像描述

4

1 回答 1

0

作为一种解决方法,您可以创建一个文本节点而不是 HTML 节点。看:

foreach (var stPageTitleTag in stPageTitleTags)
{
    var pageTitle = Strings.StripHTML(stPageTitleTag.InnerText);
    pageTitle = pageTitle.Trim();

    var pageId = CreateUpdateContentPageInDb(pageTitle, themeSlug, null, null);

    var widgetControl = string.Format("<widget:PageTitleDisplay runat=\"server\" PageId=\"{0}\" Editable=\"True\" />", pageId);

    // creating a text node
    var widget = htmlDoc.CreateTextNode(widgetControl);
    // replacing <sppagetitle> node with the new one
    stPageTitleTag.ReplaceChild(widget, stPageTitleTag);
}

这应该得到你想要的输出。

于 2013-10-21T20:47:18.280 回答