2013-10-21 59 views
0

我想用Html字符串中的HtmlAgilityPack替換一些文本並放置ASP.net用戶控件,但我在輸出html中得到小寫。任何想法如何獲得原始案例輸出。OptionOutputOriginalCase不工作在HtmlAgilityPack

代碼:

 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

+0

'widget:PageTitleDisplay'是特定命名空間中的一個元素,並且Html Agility Pack不完全支持命名空間。 –

回答

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); 
} 

這應該得到你想要的輸出。

+0

它不改變我新添加的字符串的情況下,但現有的html標籤所有 –