扒开腿挺进岳湿润的花苞视频|将军边走边挺进她H树林|挺进朋友人妻张婉莹身体|岳脱得精光让我挺进去视频|第一次挺进莹莹的身体里视频|脱岳裙子从后面挺进去视频

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡介 客服中心 軟件技術(shù) 網(wǎng)站建設
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> .Net技術(shù) >> 文章正文

如何使用XSL來定義ASP.NET Web Control

     在開發(fā)Web Control的時候,經(jīng)常需要在源代碼中嵌入一些HTML代碼, 比如這樣(代碼片段):

protected override void RenderContents(HtmlTextWriter output)
        {
            SPList myList = GetListByName(List);
            if (myList != null)
            {
                uint currentLanguageCode = getCurrentLanguageCode();
                output.WriteBeginTag("ul");
                output.WriteAttribute("class", "lng");
                output.WriteLine(HtmlTextWriter.TagRightChar);

                foreach (SPListItem item in myList.Items)
                {
                    if (uint.Parse((string)item["Language Code"]) != getCurrentLanguageCode())
                    {
                        output.WriteBeginTag("li");
                        output.WriteAttribute("class", (string)item["CSS Class"]);
                        output.WriteLine(HtmlTextWriter.TagRightChar);
                        output.WriteBeginTag("a");
                        output.WriteAttribute("href", ((Microsoft.SharePoint.Publishing.Fields.LinkFieldValue)item["Language URL"]).NavigateUrl);
                        output.WriteLine(HtmlTextWriter.TagRightChar);
                        output.Write((string)item["Title"]);
                        output.WriteEndTag("a");
                        output.WriteEndTag("li");
                    }
                }
                output.WriteEndTag("ul");
            }
        }

 

這個控件的HTML會輸出成類似這樣:


<ul class="lng">
  <li class="en">
    <a href="real-url-of-en">EN</a>
  </li>
  <li class="fr">
    <a href="real-url-of-fr">FR</a>
  </li>
</ul>

但是這樣做有個問題,假如我們想改變這個web control的表現(xiàn),比如把CSS Class從“l(fā)ng” 改為“l(fā)anguage”,那么我們就必須要在這個代碼里面修改,并且需要重新編譯,這樣就帶來了極大的不方便。我們需要一種能夠不需要重新編譯代碼就可以改變HTML的方法。
這篇文章就介紹一種這樣的方法,解決方案是XML + XSL

原理是,在上面方法中,我們不直接負責HTML輸出,而是我們構(gòu)建一個XML文件在內(nèi)存中,然后我們需要自己編寫一個XSL文件來定義這個XML的表現(xiàn)!

具體這樣:(一共兩步)
1!「膶懮厦娣椒椋


protected override void RenderContents(HtmlTextWriter output)
        {
           
            SPList myList = GetListByName(List);
          
            if (myList != null)
            {
                try
                {
                    XslCompiledTransform transformer = new XslCompiledTransform();
                    string s = SPUtility.GetGenericSetupPath("TEMPLATE\\LAYOUTS") + XslFileRelativeUrl;
                    transformer.Load(s);
                    StringWriter result = new StringWriter();
                    XmlDocument mydoc = BuildXML(myList);
                    transformer.Transform(mydoc, null, result);
                    output.WriteLine(result.ToString());
                }
                catch (Exception ex)
                {
                    Page.Response.Write(ex.Message);
                }
            }
        }


其中的BuildXML()方法為:


//     <languages>
//       <language title="EN" code="1033" cssclass="en" url="en-url" />
//       <language title="FR" code="1036" cssclass="fr" url="fr-url" />
//     </languages>
public XmlDocument BuildXML(SPList myList)
        {
            if (myList != null)
            {
                XmlDocument doc = new XmlDocument();
                XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                doc.AppendChild(docNode);
                XmlNode languagesNode = doc.CreateElement("languages");
                doc.AppendChild(languagesNode);

                foreach (SPListItem item in myList.Items)
                {
                    if (uint.Parse((string)item["Language Code"]) != getCurrentLanguageCode())
                    {
                        XmlNode languageNode = doc.CreateElement("language");

                        XmlAttribute languageAttribute = doc.CreateAttribute("title");
                        languageAttribute.Value = (string)item["Title"];
                        languageNode.Attributes.Append(languageAttribute);
                       
                        languageAttribute = doc.CreateAttribute("code");
                        languageAttribute.Value = (string)item["Language Code"];
                        languageNode.Attributes.Append(languageAttribute);
                       
                        languageAttribute = doc.CreateAttribute("cssclass");
                        languageAttribute.Value = (string)item["CSS Class"];
                        languageNode.Attributes.Append(languageAttribute);
                       
                        languageAttribute = doc.CreateAttribute("url");
                        languageAttribute.Value = ((Microsoft.SharePoint.Publishing.Fields.LinkFieldValue)item["Language URL"]).NavigateUrl;
                        languageNode.Attributes.Append(languageAttribute);
                       
                        languagesNode.AppendChild(languageNode);                     
                       
                    }
                }
                return doc;
            }
            else return null;
        }


2. 定義XSL文件:


<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:output method="html" encoding="UTF-8" indent="yes"/>
 <xsl:template match="/">
  <ul class="lng">
   <xsl:for-each select="languages/language">
    <li class="
{@cssclass}">
     <a href="{@url}">
      <xsl:value-of select="@title"/>
     </a>
    </li>
   </xsl:for-each>
  </ul>
 </xsl:template>
</xsl:stylesheet>

這樣就好了,以后想改HTML就直接改上面的XSL文件就可以了,再也不用重新編譯了。而且這樣做就把表現(xiàn)層的東西從代碼中分離了,比較符合現(xiàn)代的軟件設計思想。
可以看到上面這個控件是在SharePoint中用的,但是其思想完全不局限于SharePoint

作者:夏天的感… | 文章來源:cnblogs | 更新時間:2008-2-27 10:57:20

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    ,net基礎類的學習:system.Web.Services
    WEB服務器配置方法學習
    介紹XML在Web頁面中的應用
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·.net技術(shù) asp.net MVC3 Vi
    ·.net將視頻文件格式轉(zhuǎn)換成
    ·NET Framework 2.0 Servic
    ·如何動態(tài)修改winform的app
    ·asp,net軟件結(jié)構(gòu)設計和相關(guān)
    ·學習怎樣使用ASP.NET中的虛
    ·,net基礎類的學習:system
    ·.net學習:c#事件的深入分
    ·Facade Pattern學習總結(jié)
    ·C#如何設置或者獲取目錄的
    ·如何使用XSL來定義ASP.NET
    ·理解WCF Data Contract契約
    ·如何能在.net2.0開發(fā)的控件
    ·模式怎樣使用,講解模式的
    ·如何解決Menu菜單被frame遮
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) m.jdtbank.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000
     
    同仁县| 永平县| 宁安市| 沧源| 绥滨县| 曲沃县| 安康市| 惠州市| 新民市| 津市市| 射阳县| 丁青县| 和田县| 渝中区| 军事| 保定市| 神池县| 顺昌县| 临沭县| 星子县| 濉溪县| 梅河口市| 峡江县| 平乡县| 黔西县| 陆川县| 如皋市| 宁河县| 和硕县| 博乐市| 望城县| 吴桥县| 南漳县| 纳雍县| 正镶白旗| 桐柏县| 瑞丽市| 大新县| 怀宁县| 荣成市| 海盐县|