一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

在.Net中使用msxsl:script腳本塊擴(kuò)展XSLT的具體實(shí)踐與應(yīng)用_.NET Es...

 kittywei 2011-06-20

一概述

XSLT可以用于將XML格式的數(shù)據(jù)轉(zhuǎn)換為其它格式,在數(shù)據(jù)和展示分開(kāi)以及數(shù)據(jù)相互轉(zhuǎn)換中可以得到廣泛的應(yīng)用,比較典型的是以前的動(dòng)網(wǎng)論壇模板系統(tǒng)以及動(dòng)易的標(biāo)簽系統(tǒng)。掌握好XSLT可以靈活的處理XML,同時(shí)運(yùn)用在Web應(yīng)用程序中也非常的方便,不過(guò)缺點(diǎn)是使用者需要掌握大量的XPath、XSLT、XML等相關(guān)知識(shí)。

在XSLT中,可以直接使用腳本語(yǔ)言如Javascript輸出到Html中,進(jìn)行相關(guān)的客戶端操作,由于一些限制,XSLT提供的函數(shù)可能不能達(dá)到一些復(fù)雜的數(shù)據(jù)處理效果,這個(gè)時(shí)候就需要使用擴(kuò)展腳本塊的功能,這樣就可以使用C#等強(qiáng)類型的語(yǔ)言進(jìn)行相關(guān)的數(shù)據(jù)處理工作。

在.Net中可以進(jìn)行XSLT轉(zhuǎn)換功能的類是XslCompiledTransform ,具體參考msdn.microsoft.com/zh-tw/library/system.xml.xsl.xslcompiledtransform(zh-cn).aspx

關(guān)于本文敘述的內(nèi)容可以參考http://msdn.microsoft.com/zh-tw/library/wxaw5z5e(zh-cn).aspx

關(guān)于Xslt以及XPath可在網(wǎng)上參考相關(guān)文檔。

二實(shí)現(xiàn)msxsl:script的功能

下面舉一個(gè)例子實(shí)現(xiàn)該功能

1,新建一Web應(yīng)用程序項(xiàng)目

2,在項(xiàng)目中添加一個(gè)Xml文件News.xml,內(nèi)容如下:

<?xml version="1.0" encoding="utf-8" ?>
<AllNews>
<News Author="Raymond">
    <Title>測(cè)試新聞標(biāo)題1test test</Title>
    <Content>這里是新聞的內(nèi)容...</Content>
</News>
<News Author="Jack">
    <Title>測(cè)試新聞標(biāo)題2 test test test</Title>
    <Content>這里是新聞的內(nèi)容...</Content>
</News>
<News Author="Tom">
    <Title>測(cè)試新聞標(biāo)題3 test test test test</Title>
    <Content>這里是新聞的內(nèi)容...</Content>
</News>
</AllNews>

3,新建一個(gè)Xslt文件News.xslt,用于將Xml轉(zhuǎn)換為Html內(nèi)容如下:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www./1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
    <xsl:output method="html" indent="yes"/>

    <xsl:template match="/">
      <xsl:call-template name="style"/>
      <xsl:call-template name="showNews">
        <xsl:with-param name="news" select="AllNews/News"/>
      </xsl:call-template>
    </xsl:template>

<xsl:template name="style">
    <style>
      .title{font-size:14px;font-weight:bold;color:White;background-color:#000000;}
      div.newsBlock{border:1px dashed #000000;padding:5px;margin-bottom:10px;background-color:Gray;}
      div.content{text-indent:2em;}
    </style>
</xsl:template>

<!--展示新聞-->
<xsl:template name="showNews">
    <xsl:param name="news"/>
    <xsl:for-each select="$news">
      <div class="newsBlock">
        <div class="title">
          <xsl:value-of select="Title"/>
        </div>
        <div class="content">
          <xsl:value-of select="Content"/>(<xsl:value-of select="@Author"/>)
        </div>
      </div>
    </xsl:for-each>
</xsl:template>
</xsl:stylesheet>

4,在Web項(xiàng)目的Default.aspx.cs中添加解析Xml的代碼并且輸出

添加代碼如下:

protected void Page_Load(object sender, EventArgs e)
        {
            this.ShowNews();
        }

        /// <summary>
        /// 轉(zhuǎn)換Xml并且顯示新聞
        /// </summary>
        private void ShowNews()
        {
            //實(shí)例化
            XslCompiledTransform transform = new XslCompiledTransform();
            //加載樣式表
            transform.Load(Server.MapPath("News.xslt"));
            //轉(zhuǎn)換并且輸出
            transform.Transform(Server.MapPath("News.xml"), null, Response.OutputStream);
        }

瀏覽Default.aspx 我們可以看到效果如下:

這樣數(shù)據(jù)就正確的顯示出來(lái)了

5,添加腳本塊

我們?cè)囅胍环N情況,Xml中的一些數(shù)據(jù)可能通過(guò)xslt的函數(shù)無(wú)法處理那么這個(gè)時(shí)候我們需要借助于其他語(yǔ)言進(jìn)行處理,這個(gè)時(shí)候我們可以考慮使用擴(kuò)展腳本塊來(lái)實(shí)現(xiàn)。

這里舉一個(gè)例子,我們將新聞的標(biāo)題僅顯示前邊7個(gè)字符,我們通過(guò)擴(kuò)展的C#函數(shù)來(lái)處理(當(dāng)然直接通過(guò)xslt的substring可以直接處理,這里僅舉例而已,在一些情況下xslt自帶函數(shù)無(wú)法實(shí)現(xiàn)很多跟業(yè)務(wù)邏輯層、數(shù)據(jù)層等相關(guān)的操作的情況下可以使用此方法)。

5.1,新建一個(gè)類庫(kù)項(xiàng)目AssemblyTest

添加類XsltTest

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AssemblyTest
{
    public class XsltTest
    {
        /// <summary>
        /// 返回縮減的標(biāo)題
        /// </summary>
        /// <param name="title"></param>
        /// <returns></returns>
        public static string GetTitle(string title)
        {
            return title.Substring(0, 7);
        }
    }
}

5.2在Web應(yīng)用程序中添加對(duì)AssemblyTest類庫(kù)項(xiàng)目的引用

5.3修改News.xslt內(nèi)容為

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www./1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
xmlns:pl="http://www./xslt/example">

<msxsl:script language

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    狠狠做深爱婷婷久久综合| 亚洲国产精品久久精品成人| 国产精品美女午夜福利| 国产一区二区三区免费福利| av国产熟妇露脸在线观看| 国内胖女人做爰视频有没有| 亚洲a级一区二区不卡| 亚洲av秘片一区二区三区| 国产美女网红精品演绎| 欧美日韩成人在线一区| 九九久久精品久久久精品| 国产成人av在线免播放观看av | 在线观看视频成人午夜| 免费在线播放一区二区| 一区二区在线激情视频| 欧美人与动牲交a精品| 少妇熟女精品一区二区三区| 国产一区麻豆水好多高潮| 精品国产av一区二区三区不卡蜜 | 黄色激情视频中文字幕| 厕所偷拍一区二区三区视频| 国内外激情免费在线视频| 亚洲综合一区二区三区在线| 又大又长又粗又黄国产| 国产中文另类天堂二区| 激情内射日本一区二区三区| 好吊妞在线免费观看视频| 亚洲午夜精品视频在线| 日本不卡在线一区二区三区| 久久机热频这里只精品| 久久99精品国产麻豆婷婷洗澡| 麻豆果冻传媒一二三区| 中文字幕人妻av不卡| 国产精品成人免费精品自在线观看| 欧美中文字幕一区在线| 精品偷拍一区二区三区| 欧美做爰猛烈叫床大尺度| 久久精品偷拍视频观看| 美国黑人一级黄色大片| 狠狠干狠狠操在线播放| 成人日韩视频中文字幕|