,引言
在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)換。
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)的程序代碼
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。