2009-09-24 102 views
1

我目前正在玩弄我擁有的CMS創意。它基於MonoRail,NHibernate堆棧。我知道那裏已經有一百萬個CMS解決方案。這對我嘗試一些新東西的好處更多。使用C#進行有效的自定義標籤解析#

無論如何,管理方面的事情進展良好,全流程的插件架構,但我已經打了一些道具與前端模板管理方面的事情。

我想要做的是讓開發人員編寫自己的自定義標籤,例如

<cms:news> 
    <h1><cms:news:title /></h1> 
    <p><cms:news:date /></p> 
    <cms:news:story /> 
</cms:news> 

我相信這會給開發者很大的靈活性。

我正在努力的部分是解析這些標籤。我可以使用反射,但是我擔心這可能對每一頁都是相當密集的。有沒有其他人做過這樣的事情,有更好的解決方案?

對不起,信息傢伙。這裏有更多信息給你。

上述代碼將位於CMS的「頁面」中。完整的頁面標記只是一個數據庫記錄。

一旦解析器命中那裏標籤,然後需要處理它們將其轉換爲內容。在解析上面的例子就按CMS:新聞標籤並撥打電話,以這樣的

public void news() 
{ 
    // Get all of the news articles from the database 
} 

CMS中的功能:新聞:標題(或CMS:news.title)標籤會叫這樣的功能

public string newstitle() 
{ 
    // Return the news title for the current news element we are rendering 
} 

希望這是現在更有意義

感謝

約翰

+1

我們需要更多的上下文:這些標籤在哪裏? .aspx頁面?還是你自己處理html/xml?你是否已經解析了html/xml?怎麼樣?的System.Xml?你會如何使用反射?什麼? – 2009-09-24 08:40:23

回答

1

我想我一直在看這一切都是錯誤的。

我基本上可以做到這一點,我使用類似Spark View Engine的InMemoryViewFolder和使用ViewComponents自定義標籤。

0

個你考慮到使用的標籤是不是有效的XML:你不能有多個冒號的元素名稱(只有一個命名空間與本地名稱分開)

考慮這個:

<cms:news> 
    <h1><cms:news.title /></h1> 
    <p><cms:news.date /></p> 
    <cms:news.story /> 
</cms:news> 

解析這個XML,有許多可用的選項給你:

  • 的XmlReader
  • 的XmlDocument
  • 的XDocument(LINQ到XML)

我不認爲XML序列做的是一個選項,如果標籤是可定製的......

,無論如何,我不知道你想達到什麼......會是什麼你使用這些標籤嗎?你能在你的問題上更具體嗎?