OptionOutputOriginalCase在HtmlAgilityPack中不起作用

时间:2013-10-21 19:48:00

标签: c# html-agility-pack

我试图在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;
        }

enter image description here

1 个答案:

答案 0 :(得分: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);
}

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