整合營(yíng)銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          在編程語(yǔ)言Python中,如何使用xslt提取網(wǎng)頁(yè)數(shù)

          在編程語(yǔ)言Python中,如何使用xslt提取網(wǎng)頁(yè)數(shù)據(jù)

          ,引言

          在Python網(wǎng)絡(luò)爬蟲(chóng)內(nèi)容提取器一文我們?cè)敿?xì)講解了核心部件:可插拔的內(nèi)容提取器類gsExtractor。本文記錄了確定gsExtractor的技術(shù)路線過(guò)程中所做的編程實(shí)驗(yàn)。這是第一部分,實(shí)驗(yàn)了用xslt方式一次性提取靜態(tài)網(wǎng)頁(yè)內(nèi)容并轉(zhuǎn)換成xml格式。

          2,用lxml庫(kù)實(shí)現(xiàn)網(wǎng)頁(yè)內(nèi)容提取

          lxml是python的一個(gè)庫(kù),可以迅速、靈活地處理 XML。它支持 XML Path Language (XPath) 和 Extensible Stylesheet Language Transformation (XSLT),并且實(shí)現(xiàn)了常見(jiàn)的 ElementTree API。

          這2天測(cè)試了在python中通過(guò)xslt來(lái)提取網(wǎng)頁(yè)內(nèi)容,記錄如下:

          2.1,抓取目標(biāo)

          假設(shè)要提取集搜客官網(wǎng)舊版論壇的帖子標(biāo)題和回復(fù)數(shù),如下圖,要把整個(gè)列表提取出來(lái),存成xml格式

          2.2,源代碼1:只抓當(dāng)前頁(yè),結(jié)果顯示在控制臺(tái)

          Python的優(yōu)勢(shì)是用很少量代碼就能解決一個(gè)問(wèn)題,請(qǐng)注意下面的代碼看起來(lái)很長(zhǎng),其實(shí)python函數(shù)調(diào)用沒(méi)有幾個(gè),大篇幅被一個(gè)xslt腳本占去了,在這段代碼中,只是一個(gè)好長(zhǎng)的字符串而已,至于為什么選擇xslt,而不是離散的xpath或者讓人撓頭的正則表達(dá)式,請(qǐng)參看《Python即時(shí)網(wǎng)絡(luò)爬蟲(chóng)項(xiàng)目啟動(dòng)說(shuō)明》,我們期望通過(guò)這個(gè)架構(gòu),把程序員的時(shí)間節(jié)省下來(lái)一大半。

          可以拷貝運(yùn)行下面的代碼(在windows10, python3.2下測(cè)試通過(guò)):

          from urllib import request
          from lxml import etree
          url="http://www.gooseeker.com/cn/forum/7"conn=request.urlopen(url)
          
          doc=etree.HTML(conn.read())
          
          xslt_root=etree.XML("""\
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
          <xsl:template match="/">
          <列表>
          <xsl:apply-templates select="http://*[@id='forum' and count(./table/tbody/tr[position()>=1 and count(.//*[@class='topic']/a/text())>0])>0]" mode="列表"/>
          </列表>
          </xsl:template>
          
          <xsl:template match="table/tbody/tr[position()>=1]" mode="list">
          <item>
          <標(biāo)題>
          <xsl:value-of select="*//*[@class='topic']/a/text()"/>
          <xsl:value-of select="*[@class='topic']/a/text()"/>
          <xsl:if test="@class='topic'">
          <xsl:value-of select="a/text()"/>
          </xsl:if>
          </標(biāo)題>
          <回復(fù)數(shù)>
          <xsl:value-of select="*//*[@class='replies']/text()"/>
          <xsl:value-of select="*[@class='replies']/text()"/>
          <xsl:if test="@class='replies'">
          <xsl:value-of select="text()"/>
          </xsl:if>
          </回復(fù)數(shù)>
          </item>
          </xsl:template>
          
          <xsl:template match="http://*[@id='forum' and count(./table/tbody/tr[position()>=1 and count(.//*[@class='topic']/a/text())>0])>0]" mode="列表">
          <item>
          <list>
          <xsl:apply-templates select="table/tbody/tr[position()>=1]" mode="list"/>
          </list>
          </item>
          </xsl:template>
          </xsl:stylesheet>""")
          
          transform=etree.XSLT(xslt_root)
          result_tree=transform(doc)print(result_tree)

          2.3,抓取結(jié)果

          得到的抓取結(jié)果如下圖:

          2.4,源代碼2:翻頁(yè)抓取,結(jié)果存入文件

          我們對(duì)2.2的代碼再做進(jìn)一步修改,增加翻頁(yè)抓取和存結(jié)果文件功能,代碼如下:

          from urllib import request
          from lxml import etree
          import timexslt_root=etree.XML("""\
          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
          <xsl:template match="/">
          <列表>
          <xsl:apply-templates select="http://*[@id='forum' and count(./table/tbody/tr[position()>=1 and count(.//*[@class='topic']/a/text())>0])>0]" mode="列表"/>
          </列表>
          </xsl:template>
          
          <xsl:template match="table/tbody/tr[position()>=1]" mode="list">
          <item>
          <標(biāo)題>
          <xsl:value-of select="*//*[@class='topic']/a/text()"/>
          <xsl:value-of select="*[@class='topic']/a/text()"/>
          <xsl:if test="@class='topic'">
          <xsl:value-of select="a/text()"/>
          </xsl:if>
          </標(biāo)題>
          <回復(fù)數(shù)>
          <xsl:value-of select="*//*[@class='replies']/text()"/>
          <xsl:value-of select="*[@class='replies']/text()"/>
          <xsl:if test="@class='replies'">
          <xsl:value-of select="text()"/>
          </xsl:if>
          </回復(fù)數(shù)>
          </item>
          </xsl:template>
          
          <xsl:template match="http://*[@id='forum' and count(./table/tbody/tr[position()>=1 and count(.//*[@class='topic']/a/text())>0])>0]" mode="列表">
          <item>
          <list>
          <xsl:apply-templates select="table/tbody/tr[position()>=1]" mode="list"/>
          </list>
          </item>
          </xsl:template>
          </xsl:stylesheet>""")
          
          baseurl="http://www.gooseeker.com/cn/forum/7"basefilebegin="jsk_bbs_"basefileend=".xml"count=1while (count < 12):
           url=baseurl + "?page=" + str(count)
           conn=request.urlopen(url)
           doc=etree.HTML(conn.read())
           transform=etree.XSLT(xslt_root)
           result_tree=transform(doc) print(str(result_tree))
           file_obj=open(basefilebegin+str(count)+basefileend,'w',encoding='UTF-8')
           file_obj.write(str(result_tree))
           file_obj.close()
           count +=1
           time.sleep(2)

          我們?cè)黾恿藢?xiě)文件的代碼,還增加了一個(gè)循環(huán),構(gòu)造每個(gè)翻頁(yè)的網(wǎng)址,但是,如果翻頁(yè)過(guò)程中網(wǎng)址總是不變?cè)趺崔k?其實(shí)這就是動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容,下面會(huì)討論這個(gè)問(wèn)題。

          3,總結(jié)

          這是開(kāi)源Python通用爬蟲(chóng)項(xiàng)目的驗(yàn)證過(guò)程,在一個(gè)爬蟲(chóng)框架里面,其它部分都容易做成通用的,就是網(wǎng)頁(yè)內(nèi)容提取和轉(zhuǎn)換成結(jié)構(gòu)化的操作難于通用,我們稱之為提取器。但是,借助GooSeeker可視化提取規(guī)則生成器MS謀數(shù)臺(tái) ,提取器的生成過(guò)程將變得很便捷,而且可以標(biāo)準(zhǔn)化插入,從而實(shí)現(xiàn)通用爬蟲(chóng),在后續(xù)的文章中會(huì)專門(mén)講解MS謀數(shù)臺(tái)與Python配合的具體方法。

          好了,以上就是小編給大家?guī)?lái)的全部?jī)?nèi)容,轉(zhuǎn)發(fā)此文+關(guān)注 并私信小編“資料”即可免費(fèi)領(lǐng)取2019最新python資料和零基礎(chǔ)入門(mén)教程,不定期分享干貨,歡迎初學(xué)和進(jìn)階中的小伙伴!

          過(guò)使用 XSLT,您可以把 XML 文檔轉(zhuǎn)換成 HTML 格式。


          使用 XSLT 顯示 XML

          XSLT 是首選的 XML 樣式表語(yǔ)言。

          XSLT(eXtensible Stylesheet Language Transformations)遠(yuǎn)比 CSS 更加完善。

          XSLT 是在瀏覽器顯示 XML 文件之前,先把它轉(zhuǎn)換為 HTML:

          使用 XSLT 顯示 XML

          如果您想要學(xué)習(xí)有關(guān) XSLT 的知識(shí),請(qǐng)?jiān)谖覀兊氖醉?yè)查找 XSLT 教程。


          在服務(wù)器上通過(guò) XSLT 轉(zhuǎn)換 XML

          在上面的實(shí)例中,當(dāng)瀏覽器讀取 XML 文件時(shí),XSLT 轉(zhuǎn)換是由瀏覽器完成的。

          在使用 XSLT 來(lái)轉(zhuǎn)換 XML 時(shí),不同的瀏覽器可能會(huì)產(chǎn)生不同結(jié)果。為了減少這種問(wèn)題,可以在服務(wù)器上進(jìn)行 XSLT 轉(zhuǎn)換。

          件項(xiàng)目實(shí)訓(xùn)及課程設(shè)計(jì)指導(dǎo)——如何應(yīng)用XML+XSLT技術(shù)分離Web表示層數(shù)據(jù)和樣式

          1、"XML+XSLT"技術(shù)在J2EE技術(shù)平臺(tái)中的應(yīng)用

          Java語(yǔ)言及相關(guān)的應(yīng)用技術(shù)的產(chǎn)生解決了跨平臺(tái)的軟件應(yīng)用系統(tǒng)的開(kāi)發(fā),但沒(méi)有解決如何實(shí)現(xiàn)跨平臺(tái)的數(shù)據(jù)交換問(wèn)題。在傳統(tǒng)的軟件應(yīng)用系統(tǒng)中,為了能夠?qū)崿F(xiàn)在不同的系統(tǒng)平臺(tái)之間交換數(shù)據(jù)、同時(shí)還要保證數(shù)據(jù)的完整性,是相對(duì)比較麻煩的一件事情。

          基于此應(yīng)用的目的和要求,誕生了XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言)技術(shù)。應(yīng)用XML語(yǔ)言可以實(shí)現(xiàn)軟件應(yīng)用系統(tǒng)中的"內(nèi)容"與"表現(xiàn)"相互分離,并且XML還是一種可擴(kuò)展的標(biāo)簽語(yǔ)言。

          如下示例圖中的代碼為一個(gè)定義學(xué)生信息的XML格式文檔示例,讀者從此示例中可以了解到XML格式文檔只定義數(shù)據(jù)內(nèi)容(或者應(yīng)用系統(tǒng)處理的最終結(jié)果),而這些數(shù)據(jù)或者結(jié)果最終在什么終端設(shè)備顯示、以及以什么風(fēng)格顯示都沒(méi)有定義。

          基于XML語(yǔ)言及應(yīng)用技術(shù)的XSLT(Extensible Stylesheet Language Transformations,擴(kuò)展樣式表轉(zhuǎn)換語(yǔ)言)的主要作用是將XML由一種格式轉(zhuǎn)換為另一種格式(當(dāng)然,也可以為其它格式,如HTML網(wǎng)頁(yè),純文字等),而在J2EE Web應(yīng)用系統(tǒng)的開(kāi)發(fā)實(shí)現(xiàn)中,應(yīng)用XSLT技術(shù)能夠?qū)崿F(xiàn)將XML格式的源文檔通過(guò)轉(zhuǎn)換引擎并按照XSL(eXtensible Stylesheet Lanaguage,擴(kuò)展樣式表語(yǔ)言)模板的格式最終轉(zhuǎn)換輸出目標(biāo)HTML格式的文檔。

          如下示例圖中的代碼為某個(gè)XSLT文檔文件的內(nèi)容,其中包含有<xsl:stylesheet>、<xsl:template>等標(biāo)簽,同時(shí)在<xsl:template></xsl:template>標(biāo)簽內(nèi)包含有一個(gè)完整的HTML文件所應(yīng)該具有的標(biāo)簽。這些標(biāo)簽都起什么作用?源XML文檔最終在瀏覽器中的顯示結(jié)果如何?

          由于XSLT文檔文件本身也是一個(gè) XML格式的文檔,因此它也總是由如下的XML聲明語(yǔ)句起始:<?xml version="1.0" encoding="gb2312"?>

          但由于本文章的篇幅有限,讀者如果需要詳細(xì)了解和學(xué)習(xí)XML、XSLT和XHTML等相關(guān)的語(yǔ)法、技術(shù)和應(yīng)用等,可以參考作者的《J2EE Web核心技術(shù)——XHTML與XML應(yīng)用開(kāi)發(fā)》一書(shū)中相關(guān)章節(jié)內(nèi)容。

          讀者也許還會(huì)有許多的疑問(wèn),比如為什么要多此一舉?請(qǐng)讀者保持耐心,繼續(xù)往下閱讀。

          2、XSL技術(shù)概述及在J2EE系統(tǒng)平臺(tái)中的應(yīng)用

          (1)XSL是什么

          XSL就是可擴(kuò)展樣式表語(yǔ)言(eXtensible Stylesheet Lanaguage),XSL是參考SGML(Standard Generalized Markup Language,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言)中的DSSSL(Document Style Semanticsand Specification Language,文檔樣式語(yǔ)義和規(guī)范語(yǔ)言,它主要是用來(lái)設(shè)置SGML的表現(xiàn)樣式)而設(shè)計(jì)的。

          (2)為什么要提供XSL技術(shù)

          盡管"CSS+Div"能夠?yàn)閃eb應(yīng)用系統(tǒng)的頁(yè)面開(kāi)發(fā)人員分離Web頁(yè)面中的結(jié)構(gòu)和風(fēng)格,從而實(shí)現(xiàn)分離Web頁(yè)面中的數(shù)據(jù)和表現(xiàn)。但如果其中的數(shù)據(jù)是采用XML格式表示,此時(shí)如果再繼續(xù)采用CSS層疊樣式表技術(shù)來(lái)為該XML格式文檔數(shù)據(jù)設(shè)置表現(xiàn)樣式,由于CSS層疊樣式表采用的是與XML完全不同的一套語(yǔ)法規(guī)則定義,無(wú)法使用相同的XML解析器進(jìn)行處理和解析,這為軟件應(yīng)用系統(tǒng)項(xiàng)目開(kāi)發(fā)帶來(lái)了許多額外的負(fù)擔(dān)。

          最初設(shè)計(jì)XSL的主要目的就是希望采用XML格式的語(yǔ)法規(guī)則提供一種為XML文檔設(shè)置表現(xiàn)樣式的新方法。而CSS的主要問(wèn)題是由于沒(méi)有邏輯控制的能力——CSS不能重新排序文檔中的元素、也不能判斷和控制哪個(gè)元素被顯示、哪個(gè)不被顯示、當(dāng)然也不能統(tǒng)計(jì)計(jì)算元素中的數(shù)據(jù)等功能要求。

          因此CSS層疊樣式表技術(shù)一般只適合用于輸出固定內(nèi)容的最終Web頁(yè)面文檔,但CSS層疊樣式表技術(shù)的主要優(yōu)點(diǎn)是簡(jiǎn)潔、消耗系統(tǒng)資源少;而XSLT雖然功能強(qiáng)大,但因?yàn)橐匦滤饕齒ML結(jié)構(gòu)樹(shù),所以消耗系統(tǒng)內(nèi)存量比較多。

          在企業(yè)級(jí)的軟件應(yīng)用系統(tǒng)開(kāi)發(fā)中,一般常常將CSS和XSLT兩者相互結(jié)合使用。比如在Web服務(wù)器端用XSLT處理相關(guān)的文檔,而在客戶端則用CSS層疊樣式表技術(shù)來(lái)控制數(shù)據(jù)在瀏覽器端的最終顯示風(fēng)格,這樣的設(shè)計(jì)方案能夠大大地減少響應(yīng)時(shí)間。

          3、XSL技術(shù)主要包括兩個(gè)組成部分

          XSL技術(shù)主要包括兩個(gè)組成部分:XSLT(eXtensible Stylesheet Language Transformation)和XSL-FO(XSL Formatting Object)。

          其中的XSLT主要是實(shí)現(xiàn)轉(zhuǎn)換XML格式的文檔,而XSL-FO主要是格式化XML文檔。其中XSL-FO的作用就類似CSS層疊樣式表技術(shù)在HTML頁(yè)面中的作用,但作者在本文中重點(diǎn)為讀者介紹XSLT相關(guān)的技術(shù)及應(yīng)用。

          因此,XSL從本質(zhì)上可以看著為是一種可以將XML轉(zhuǎn)化成其它類型語(yǔ)言的語(yǔ)言、一種可以過(guò)濾和選擇XML數(shù)據(jù)的語(yǔ)言、一種能夠格式化XML數(shù)據(jù)的語(yǔ)言。

          4、XSLT主要是面向轉(zhuǎn)換類型的應(yīng)用

          XSLT的主要作用是將XML文檔數(shù)據(jù)內(nèi)容由一種格式轉(zhuǎn)換為另一種格式——比如,將XML格式的文檔轉(zhuǎn)換為HTML/XHTML(或者WML)等格式的文檔是目前XSLT應(yīng)用最為廣泛的應(yīng)用領(lǐng)域。

          為什么要應(yīng)用XSLT及相關(guān)的技術(shù)?因?yàn)閄ML格式的數(shù)據(jù)文檔能夠便于交換但不便于人類的閱讀和理解、特別是機(jī)器自動(dòng)化地閱讀。因此如何能夠按照人類的要求顯示XML格式文檔中的數(shù)據(jù)?如何實(shí)現(xiàn)將同一個(gè)XML格式文檔中的數(shù)據(jù)在不同的顯示平臺(tái)中顯示輸出?

          5、XSLT數(shù)據(jù)格式轉(zhuǎn)換的基本實(shí)現(xiàn)原理

          數(shù)據(jù)格式轉(zhuǎn)換的重要思想是要把XML格式文檔視為一種樹(shù)形結(jié)構(gòu),轉(zhuǎn)換的過(guò)程其實(shí)就是從源XML格式文檔樹(shù)生成結(jié)果樹(shù)的過(guò)程。其中的XSL樣式單定義了源XML格式文檔樹(shù)和結(jié)果樹(shù)中對(duì)應(yīng)部分的轉(zhuǎn)換規(guī)則,在每條規(guī)則中包含了一個(gè)模板,并對(duì)應(yīng)著一種模式——模板定義了轉(zhuǎn)換的結(jié)果和轉(zhuǎn)換的基本規(guī)則,而模式則規(guī)定了需要進(jìn)行轉(zhuǎn)換的元素或?qū)傩詫?duì)象。

          6、XSLT數(shù)據(jù)格式轉(zhuǎn)換的實(shí)現(xiàn)過(guò)程

          首先,將XML格式文檔轉(zhuǎn)換為DOM(Document Object Model,文檔對(duì)象模型)樹(shù)結(jié)構(gòu),這主要是利用XSLT來(lái)實(shí)現(xiàn)——XSLT處理器首先要做的是通過(guò)XML解析器(比如DOM或SAX)技術(shù)讀取XML格式文檔中的各個(gè)標(biāo)簽和數(shù)據(jù),并將XML樹(shù)狀結(jié)構(gòu)重新整理和組合產(chǎn)生出一個(gè)臨時(shí)的樹(shù)狀結(jié)構(gòu),這個(gè)樹(shù)狀結(jié)構(gòu)稱為XML文檔結(jié)果樹(shù)。

          其次,再對(duì)轉(zhuǎn)換后的DOM樹(shù)進(jìn)行格式化并轉(zhuǎn)換為其它的目標(biāo)形式,這主要是利用XSL-FO來(lái)實(shí)現(xiàn)。XSL處理程序?qū)⑦@些數(shù)據(jù)轉(zhuǎn)換(也就是格式化過(guò)程)為另一種格式良好的XML文件(如:WML、HTML、VoiceXML等)。

          目前在微軟IE瀏覽器中已經(jīng)內(nèi)嵌有實(shí)現(xiàn)這個(gè)轉(zhuǎn)換過(guò)程的XML處理器程序。歡迎讀者繼續(xù)閱讀作者的另一篇文章《軟件項(xiàng)目實(shí)訓(xùn)及課程設(shè)計(jì)指導(dǎo)--應(yīng)用XML+XSLT技術(shù)分離Web表示層數(shù)據(jù)和樣式示例》可以詳細(xì)學(xué)習(xí)和了解如何在軟件應(yīng)用系統(tǒng)開(kāi)發(fā)中應(yīng)用XML+XSLT技術(shù)。

          7、應(yīng)用XSLT實(shí)現(xiàn)對(duì)XML格式文檔中的數(shù)據(jù)轉(zhuǎn)換和合并的應(yīng)用示例

          為了能夠讓讀者對(duì)"XML+XSLT"技術(shù)在企業(yè)級(jí)軟件應(yīng)用系統(tǒng)開(kāi)發(fā)中的應(yīng)用有感性的認(rèn)識(shí),作者在下文中給出一個(gè)典型示例加以說(shuō)明。

          在下面示例中的XML格式文檔中的"學(xué)生信息"節(jié)點(diǎn)中有多個(gè)"班級(jí)"節(jié)點(diǎn),可以通過(guò)XSLT中的<xsl:for-each>標(biāo)簽把這些節(jié)點(diǎn)數(shù)據(jù)在一個(gè)表格單元格中顯示出來(lái),從而產(chǎn)生出合并數(shù)據(jù)的應(yīng)用效果。當(dāng)然,也可以實(shí)現(xiàn)其它的應(yīng)用效果,讀者可以自行實(shí)現(xiàn)。

          (1)示例中所對(duì)應(yīng)的XML格式文檔

          該XML文檔文件名稱為student.xml,其中在<?xml-stylesheet?>標(biāo)簽中通過(guò)href屬性指定對(duì)應(yīng)的XSLT文件,該文件名稱為student.xsl。

          <?xml version="1.0" encoding="GB2312" standalone="yes" ?>
          <?xml-stylesheet type="text/xsl" href="student.xsl" ?>
          <軟件學(xué)院學(xué)生信息>
                <學(xué)生信息 性別="男">
                      <姓名>張三</姓名>
                      <出生日期>1987/10/18</出生日期>
                      <專業(yè)>軟件工程</專業(yè)>
                      <班級(jí) 方向="J2EE軟件開(kāi)發(fā)">軟件1班</班級(jí)>
                      <班級(jí)>9教?hào)|201</班級(jí)>
                </學(xué)生信息>
                <學(xué)生信息 性別="女">
                      <姓名>李四</姓名>
                      <出生日期>1988/2/18</出生日期>
                      <專業(yè)>軟件工程</專業(yè)>
                      <班級(jí) 方向="數(shù)字媒體方向">軟件2班</班級(jí)>
                      <班級(jí)>9教?hào)|202</班級(jí)>
                </學(xué)生信息>
          </軟件學(xué)院學(xué)生信息>

          (2)示例中的XML文檔所對(duì)應(yīng)的XSLT文檔(student.xsl) 文件

          在student.xsl 文件中應(yīng)用了XSL語(yǔ)言中的一些標(biāo)簽,而XSLT文件中的標(biāo)簽語(yǔ)法大致可分為如下的三種類型:

          1)選擇模式,如<xsl:for-each>、<xsl:value-of>和 <xsl:apply-templates>等標(biāo)簽,這些選擇模式的標(biāo)簽語(yǔ)句將數(shù)據(jù)從XML文檔中提取出來(lái),是一種簡(jiǎn)單獲得數(shù)據(jù)的方法。在這些標(biāo)簽中都有一個(gè)select屬性,選取XML文檔中特定的節(jié)點(diǎn)名的數(shù)據(jù)。

          2)測(cè)試(識(shí)別)模式,如<xsl:if> 和<xsl:when>等標(biāo)簽,類似于編程語(yǔ)言中的條件語(yǔ)句,主要是用于條件判斷和識(shí)別等用途。

          3)匹配模式,如<xsl:template>標(biāo)簽,它用于構(gòu)建和定義一個(gè)模板。該標(biāo)簽中的match 屬性主要是用于關(guān)聯(lián) XML文檔中的標(biāo)簽元素和轉(zhuǎn)換模板,但match 屬性的值是 XPath (XML Path Language,XML路徑語(yǔ)言)表達(dá)式(比如match="/" 則是定義整個(gè)XML格式文檔);位于<xsl:template> 標(biāo)簽元素內(nèi)部的內(nèi)容則定義了寫(xiě)到輸出結(jié)果的 HTML標(biāo)簽代碼。

          <?xml version="1.0" encoding="gb2312" ?>
          <xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
              <xsl:template match="/">
                    <html>
                    <head>
                    <title>XX交通大學(xué)軟件學(xué)院學(xué)生信息</title>
                    </head>
                    <body>
                    <xsl:apply-templates/>
                    </body>
                    </html>
              </xsl:template>
              <xsl:template match="軟件學(xué)院學(xué)生信息">
                    <h3>下面為XX交通大學(xué)軟件學(xué)院學(xué)生信息表</h3>
                    <table border="1">
                    <th>姓名</th>
                    <th>性別</th>
                    <th>出生日期</th>
                    <th>專業(yè)</th>
                    <th>班級(jí)</th>
                    <th>專業(yè)方向</th>
                    <xsl:apply-templates/>
                    </table>
              </xsl:template>
              <xsl:template match="學(xué)生信息">
                    <tr>
                    <td><xsl:value-of select="姓名"/></td>
                    <td><xsl:value-of select="@性別"/></td>
                    <td><xsl:value-of select="出生日期"/></td>
                    <td><xsl:value-of select="專業(yè)"/></td>
                    <td>
                    <xsl:for-each select="班級(jí)">
                    <xsl:value-of />
                    </xsl:for-each>
                    </td>
                    <xsl:apply-templates/>
                    </tr>
              </xsl:template>
              <xsl:template match="班級(jí)">
                    <td><xsl:value-of select="@方向"/></td>
              </xsl:template>
          </xsl:stylesheet>

          在student.xsl 文件中應(yīng)用了<xsl:apply-templates> 標(biāo)簽元素產(chǎn)生模板嵌套的應(yīng)用效果,因?yàn)?lt;xsl:apply-templates> 標(biāo)簽元素可把一個(gè)模板應(yīng)用于當(dāng)前的標(biāo)簽元素或者當(dāng)前標(biāo)簽元素的子節(jié)點(diǎn)中。

          如果向 <xsl:apply-templates> 標(biāo)簽元素添加一個(gè) select 屬性,則此標(biāo)簽元素就會(huì)僅僅處理與由其select 屬性所定義的XML標(biāo)簽中屬性值相匹配的XML標(biāo)簽元素,從而可以過(guò)濾XML標(biāo)簽。

          (3)本示例在Web瀏覽器中最終執(zhí)行的結(jié)果

          如何應(yīng)用CSS+Div分離Web表示層數(shù)據(jù)處理邏輯和展現(xiàn)邏輯

          如何應(yīng)用策略設(shè)計(jì)模式分離JDBC數(shù)據(jù)庫(kù)連接中的外部環(huán)境信息

          如何應(yīng)用策略設(shè)計(jì)模式的思想設(shè)計(jì)通用的數(shù)據(jù)庫(kù)連接類

          如何正確地創(chuàng)建和銷毀軟件應(yīng)用系統(tǒng)中JDBC數(shù)據(jù)庫(kù)連接對(duì)象實(shí)例

          如何應(yīng)用觀察者設(shè)計(jì)模式重構(gòu)系統(tǒng)中日志處理功能實(shí)現(xiàn)的程序代碼


          主站蜘蛛池模板: 久久精品国产一区二区三| 国产SUV精品一区二区88L | 97av麻豆蜜桃一区二区| 久久久久久综合一区中文字幕 | 91国在线啪精品一区| 国偷自产一区二区免费视频| 中文字幕无码一区二区免费| 中文字幕日韩一区二区三区不卡| 亚洲国产日韩在线一区| 国产精品一区电影| 中文字幕亚洲一区| 精品女同一区二区三区免费站| 久久久国产精品无码一区二区三区| 国产精品福利一区| 日本一区精品久久久久影院| 欧美成人aaa片一区国产精品| 亚洲人成网站18禁止一区| 国产一区二区三区免费| 玩弄放荡人妻一区二区三区| 风间由美在线亚洲一区| 日韩综合无码一区二区| 亚洲综合在线一区二区三区| 一本色道久久综合一区| 老熟妇仑乱一区二区视頻| 北岛玲在线一区二区| 亚洲一区在线观看视频| 爆乳熟妇一区二区三区霸乳| 亚洲影视一区二区| 精品亚洲一区二区三区在线观看| 亚洲综合无码一区二区三区| 色系一区二区三区四区五区| 日本一区二区在线| 一区二区三区在线观看中文字幕| 久久精品一区二区东京热| 国产一区二区三区樱花动漫| 男女久久久国产一区二区三区| 色综合一区二区三区| 竹菊影视欧美日韩一区二区三区四区五区 | 日本精品高清一区二区| 无码中文字幕乱码一区 | 无码人妻精品一区二区蜜桃网站|