狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频

當(dāng)前位置:系統(tǒng)之家 > 技術(shù)開發(fā)教程 > 詳細(xì)頁(yè)面

如何運(yùn)用XSL與正則表達(dá)式來驗(yàn)證數(shù)據(jù)的有效果性(二)

如何運(yùn)用XSL與正則表達(dá)式來驗(yàn)證數(shù)據(jù)的有效果性(二)

更新時(shí)間:2019-11-02 文章作者:未知 信息來源:網(wǎng)絡(luò) 閱讀次數(shù):


現(xiàn)在繼續(xù)我在上一系列中介紹的例子。我們將實(shí)現(xiàn)一個(gè)簡(jiǎn)單的搜索機(jī)制,
也許你的興趣不是在獲取書籍的標(biāo)題而是在要獲得整個(gè)書節(jié)點(diǎn)(note)上。
那么使用下面這個(gè)函數(shù)就能夠滿足你的要求了
Public Function GetFilteredElements(activeElement As Variant, RegExpfilter As String, _
Optional queryString As String = "",optional IsGlobal as Boolean=True, _
optional IgnoreCase as Boolean = True) As IXMLDOMNodeList
Dim re As RegExp
Dim filterDoc As DOMDocument
Dim nodelist As IXMLDOMNodeList
Dim filterList As IXMLDOMNodeList
Dim node As IXMLDOMElement
Dim baseNode As IXMLDOMElement
Set re = New RegExp
On Error GoTo ErrorHandler
Select Case TypeName(activeElement)
Case "IXMLDOMElement"
Set baseNode = activeElement
Case "DOMDocument"
Set baseNode = activeElement.documentElement
Case Else
Error 1001
Set GetFilteredElements = Nothing
End Select
re.Pattern = RegExpfilter
re.Global=IsGlobal
re.IgnoreCase=IgnoreCase
If queryString = "" Then
Set filterList = baseNode.selectNodes(".[textnode()]|.//*[textnode()]")
Else
Set filterList = baseNode.selectNodes(queryString)
End If
For Each node In filterList
If re.Test(node.Text) Then
node.setAttribute "filter:filteredElementFound", "true"
End If
Next
Set filterList = baseNode.selectNodes(".[@filter:filteredElementFound]|.//*[@filter:filteredElementFound]")
For Each node In filterList
node.removeAttribute "filter:filteredElementFound"
Next
Set GetFilteredElements = filterList
Exit Function
ErrorHandler:
If Err.Number = 1001 Then
MsgBox "Document must be an XML document, or a document element."
Else
Error Err.Number
End If
End Function

下面是對(duì)這個(gè)方法的簡(jiǎn)單描述:
GetFilteredElements主要是用來獲取一個(gè)XML的文檔或則一個(gè)文檔里面的節(jié)點(diǎn),并且
按照我們的需要轉(zhuǎn)換它(包括所有的該節(jié)點(diǎn)的子節(jié)點(diǎn)),將轉(zhuǎn)換后的節(jié)點(diǎn)放到一個(gè)
列表類型IXMLDOMNodeList中.
這個(gè)過濾器程序按次序?qū)γ總(gè)節(jié)點(diǎn)進(jìn)行運(yùn)用,如果一個(gè)節(jié)點(diǎn)的文本滿足了表達(dá)式的話,
那么這個(gè)節(jié)點(diǎn)就被做上一個(gè)臨時(shí)屬性的標(biāo)記為filter:filteredElementFound
(當(dāng)然為了不和你自己的XML文檔里已經(jīng)存在的標(biāo)志發(fā)生沖突,你可以把這個(gè)屬性
改成你需要的東西).
一旦所有的節(jié)點(diǎn)都被檢查完畢后,一個(gè)新的列表對(duì)象(僅僅只包含那些滿足表達(dá)式的
節(jié)點(diǎn))被創(chuàng)建了。這些臨時(shí)的屬性會(huì)被刪除掉,然后返回那些節(jié)點(diǎn)。

如果你沒有給這個(gè)函數(shù)輸入查詢參數(shù)的話,
那么將獲得整個(gè)文檔的所有葉子節(jié)點(diǎn)(就是那些沒有子元素的節(jié)點(diǎn))
如果你給這個(gè)函數(shù)輸入查詢參數(shù)的話,
那么這個(gè)函數(shù)將返回滿足條件的節(jié)點(diǎn)或則子節(jié)點(diǎn)
例如,下面的代碼將返回第一本書的標(biāo)題和描述的節(jié)點(diǎn)和第四本書的
描述節(jié)點(diǎn)
Dim bookXML=new DOMDocument
bookXML.load("bookCatalog.xml")
Set nodelist=GetfilteredElements(bookXML,"xml")
而下面的代碼將返回第一和第四本書的節(jié)點(diǎn),然后你可以根據(jù)這些節(jié)點(diǎn)獲取它們的
子節(jié)點(diǎn)的屬性。
Set nodelist=GetfilteredElements(bookXML,"xml","http://book")
通常,你應(yīng)該盡可能的定義一個(gè)XSL的查詢過濾器(filter)
因?yàn)樗鼤?huì)只返回你需要的節(jié)點(diǎn),會(huì)大大減少你需要處理的數(shù)據(jù)量。

這個(gè)函數(shù)是XML "數(shù)據(jù)庫(kù)"的一個(gè)運(yùn)用實(shí)例,因?yàn)楹芏郤QL的開發(fā)者用熟悉了的
參數(shù)(例如LIKE)在XML中是沒有等效的方法的,但是只要你在XML中能夠熟練使用
正則表達(dá)式,你會(huì)發(fā)現(xiàn)它能夠?qū)崿F(xiàn)很多LIKE語(yǔ)句能夠?qū)崿F(xiàn)的功能。

使用XSL轉(zhuǎn)換驗(yàn)證數(shù)據(jù)
正則表達(dá)式使用在XSL的轉(zhuǎn)換中是一個(gè)強(qiáng)有力的驗(yàn)證數(shù)據(jù)有效的工具。
例如,你想根據(jù)XML的數(shù)據(jù)生成一個(gè)顯示書籍標(biāo)題和描述的table
當(dāng)你使用基于DOM版本(就是使用微軟的那個(gè)模型XDOM)的時(shí)候,XSL已經(jīng)能夠?qū)崿F(xiàn)非常復(fù)雜的轉(zhuǎn)換XML為
HTML的功能了。
在XSL的這個(gè)節(jié)點(diǎn)中<xsl:script>,允許你使用腳本語(yǔ)言。
你可以在輸出流中插入文本(但是目前你就不能夠把一個(gè)DOM節(jié)點(diǎn)輸出到輸出流中).
XSL中默認(rèn)的腳本語(yǔ)言是JavaScript,
在使用的過程中你需要注意的是,由于"/"在JavaScript中是特殊字符,你需要使用
"http://"將其轉(zhuǎn)意。
代碼如下:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script language="JavaScript"><![CDATA][
IsValidBookTopic=/xml/
]]></xsl:script>
<xsl:template match="/">
<xsl:apply-templates select="http://book" />
</xsl:template>
<xsl:template match="book">
<xsl:if expr="IsValidBookTopic.test(this.text)">
<h1><xsl:value-of select="title"/></h1>
<h2><xsl:value-of select="author"/></h2>
<p><xsl:value-of select="description"/></p>
</xsl:if>
</xsl:template>
</xsl:stylesheet>
當(dāng)然,你也可以改變你的XSL中的查詢參數(shù)(例如上面例子中使用的參數(shù)是xml)
一個(gè)直接的方法是生成一個(gè)參數(shù)實(shí)體"entities"
例如下面的代碼,你需要使用"%"字符來說明一個(gè)字符是參數(shù)。
Function SetXSLParameter(XslDoc as DOMDocument ,ParamName as _
String,ParamValue as Variant) as DOMDocument
Dim XslDoc as DOMDocument
Dim ScriptNode as IXMLDOMElement
Dim re as RegExp

Set re=new RegExp
Re.global=True
Re.IgnoreCase=True
Re.pattern="%"+ParamName
For each ScriptNode in xslDoc.selectNodes("xsl:script")
ScriptNode.text=Re.replace(ScriptNode.text,cstr(ParamValue))
Next
Return XslDoc
End Function

SetXSLParameter用來給XSL文檔設(shè)置參數(shù)。
當(dāng)然你也可以不使用上面這個(gè)函數(shù),直接在XSL的腳本里面修改這個(gè)參數(shù),
但是如果你使用了上面這個(gè)函數(shù)的話,可以讓你的代碼的可擴(kuò)展性能更好。
注意的是,XSL的代碼將被上面這個(gè)函數(shù)所修改
所以如果你想對(duì)相同的XSL對(duì)象使用不同的過濾器(就是不同的查詢條件的話)
需要使用XSL對(duì)象的clone(就是制作一個(gè)XSL的副本)方法。
下面就是一個(gè)完整的例子
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl">
<xsl:script language="JavaScript"><![CDATA][
IsValidBookTopic=/%searchStr/
]]></xsl:script>
<xsl:template match="/">
<xsl:apply-templates select="http://book" />
</xsl:template>
<xsl:template match="book">
<xsl:if expr="IsValidBookTopic.test(this.text)">
<h1><xsl:value-of select="title"/></h1>
<h2><xsl:value-of select="author"/></h2>
<p><xsl:value-of select="description"/></p>
</xsl:if>
</xsl:template>
</xsl:stylesheet>

然后你就可以使用下面這段代碼來修改這個(gè)參數(shù)了
呵呵,我是搞asp的,下面這段代碼就是寫在你的asp的程序中的。

Set xmlDoc=new DomDocument
Set xslDoc=new DOMDocument
XmlDoc.load "catalog.xml"
XslDoc.load "catalog.xsl"
SetXSLParameter xslDoc, "searchStr", "pair-o-dice"
Response.write xmlDoc.transformNode(xslDoc)

同樣,使用上面的方法,你就可以設(shè)置其他的參數(shù)了,例如瀏覽器的類型呀
ASP的查詢參數(shù)呀,或則一個(gè)基于Web的組件呀。

使用正則表達(dá)式給XSL帶來了強(qiáng)大的功能。
雖然,使用這種通用性很強(qiáng)的方法在目前也許你不會(huì)看到能夠給你帶來很
大的優(yōu)勢(shì)(主要是很少有人寫XML的程序的說),但是在未來的編程過程中,
你將會(huì)體會(huì)到它的強(qiáng)大威力了。

溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!

本類教程下載

系統(tǒng)下載排行

狠狠爱成人网_日韩一级在线_国产综合自拍_亚洲精品韩国_亚洲视频导航_麻豆成人在线播放_欧美jjzz_一区在线视频观看_美脚丝袜一区二区三区在线观看_欧美91视频
欧美日本国产视频| 国产在线精品一区在线观看麻豆| 久久综合色婷婷| 精品噜噜噜噜久久久久久久久试看| 欧美日韩精品久久久| 欧美肥妇bbw| 日韩欧美精品三级| 精品国产一二三区| 久久精品视频在线免费观看| 中文字幕欧美日韩一区| 国产精品免费av| 亚洲欧美精品午睡沙发| 亚洲国产精品久久不卡毛片| 天天操天天色综合| 久久91精品国产91久久小草| 国产精品99久久久久久宅男| 成人av动漫网站| 欧美日韩精品免费观看视一区二区| 欧美久久在线| 国产伦精品一区二区三| 欧美性生交片4| 日韩欧美在线网站| 国产精品理伦片| 亚洲成人免费视频| 国产麻豆视频精品| 欧美一站二站| 中日韩在线视频| 欧美午夜一区二区三区免费大片| 日韩三级视频中文字幕| 中文字幕第一区综合| 一区二区高清在线| 国产麻豆成人传媒免费观看| 91亚洲精品久久久蜜桃网站 | 91麻豆免费看| 中文精品一区二区三区| 欧美视频精品在线观看| 久久九九久久九九| 亚洲成人动漫av| 成人综合婷婷国产精品久久| 亚洲国产婷婷香蕉久久久久久99| 久久在线精品| 久久久久九九视频| 日韩国产在线一| 成人短视频下载| 免费不卡亚洲欧美| 精品久久五月天| 亚洲国产综合人成综合网站| 成人午夜视频福利| 麻豆91精品| 国产午夜精品久久久久久久| 日韩成人免费电影| 欧美精品观看| 欧美丰满少妇xxxxx高潮对白| 中文字幕不卡一区| 国产一区二区三区av电影| 亚洲精选在线| 欧美精品一区二区三区蜜臀 | 99精品1区2区| 欧美中文字幕久久| 中文字幕一区二区5566日韩| 国产尤物一区二区在线| 国产视频一区免费看| 精品国产免费视频| 精品系列免费在线观看| 中文精品一区二区三区| 久久精品视频在线免费观看| 国产在线视频一区二区三区| 国产欧美欧美| 中文字幕一区二| 99国产精品视频免费观看| 日韩一级片在线观看| 亚洲免费av观看| 欧美日本不卡| 欧美大片国产精品| 激情综合色播激情啊| 亚洲欧美日韩在线观看a三区| 男人的天堂亚洲在线| 日韩和欧美一区二区| 亚洲网址在线| 国产色爱av资源综合区| 国产毛片一区二区| 欧美在线免费观看亚洲| 香蕉成人啪国产精品视频综合网| 欧美在线播放一区| 久久综合久久鬼色中文字| 国产一级精品在线| 欧美中文字幕一区二区三区| 亚洲成人在线观看视频| 激情一区二区三区| 国产精品嫩草影院com| 91女人视频在线观看| 精品理论电影在线| 成人av综合在线| 欧美电视剧在线观看完整版| 国产激情一区二区三区桃花岛亚洲 | 91丨九色丨蝌蚪富婆spa| 日韩亚洲欧美在线观看| 国产乱码精品1区2区3区| 欧美日韩国产首页| 国产呦萝稀缺另类资源| 欧美美女视频在线观看| 另类小说综合欧美亚洲| 欧美老肥妇做.爰bbww视频| 国产一区在线不卡| 欧美一级欧美三级在线观看| 国产suv一区二区三区88区| 欧美大白屁股肥臀xxxxxx| 波波电影院一区二区三区| 久久久久久久国产精品影院| 欧美~级网站不卡| 国产精品嫩草99a| 99riav国产精品| 亚洲第一狼人社区| 欧美色涩在线第一页| 国产精品自产自拍| 久久一区二区三区四区| 红桃视频亚洲| 视频一区二区不卡| 欧美日韩免费在线视频| 成人高清av在线| 国产精品久久久久久久第一福利| 亚洲黑丝在线| 奇米色777欧美一区二区| 欧美一区二区私人影院日本| 94色蜜桃网一区二区三区| 椎名由奈av一区二区三区| 国产农村妇女精品一二区| 麻豆精品一区二区三区| 亚洲精品一区二区三区蜜桃下载 | 欧美精品一区二区久久婷婷| 亚洲午夜精品国产| 视频一区二区国产| 欧美mv日韩mv国产网站| 99精品欧美| 国产真实乱子伦精品视频| 欧美国产日韩一二三区| 久久精品三级| 91网站最新地址| 亚洲国产欧美在线人成| 亚洲欧美激情一区二区| 久久久久久国产精品mv| 国产黄人亚洲片| 一区二区免费在线播放| 欧美日韩精品一区二区三区| 欧美日韩综合网| 久久激情五月婷婷| 国产精品乱人伦| 欧美三级三级三级爽爽爽| 欧美日韩国产综合网| 久久成人羞羞网站| 中文字幕一区日韩精品欧美| 欧美日韩国产一级片| 亚洲大片av| 国产成人亚洲综合a∨婷婷| 亚洲综合色在线| 欧美成人a视频| 老牛影视一区二区三区| 91在线视频网址| 久久99深爱久久99精品| 亚洲图片另类小说| 久久综合色天天久久综合图片| 久久不射网站| 欧美午夜久久| 国产麻豆9l精品三级站| 午夜成人免费电影| 亚洲欧美综合在线精品| 欧美成人艳星乳罩| 欧美自拍偷拍一区| 国产欧美日本在线| 很黄很黄激情成人| www.亚洲色图.com| 国产一区欧美一区| 无码av中文一区二区三区桃花岛| 日本一区二区成人在线| 日韩免费在线观看| 欧美日韩免费一区二区三区 | 久久免费国产精品| 欧美一区二区三区免费| 在线观看日产精品| 性伦欧美刺激片在线观看| 国语对白精品一区二区| av激情亚洲男人天堂| 懂色av中文字幕一区二区三区| 日本va欧美va精品| 日韩影院在线观看| 亚洲福利一区二区| 一区二区三区不卡视频在线观看| 国产三级精品在线| 久久久久免费观看| 日韩欧美电影一区| 久久久久国内| 日韩影院在线观看| 亚洲v中文字幕| 午夜精品久久一牛影视| 亚洲一区二区免费视频| 一区二区三区成人| 亚洲午夜一区二区三区| 亚洲成在人线免费| 日本视频中文字幕一区二区三区| 亚洲va欧美va天堂v国产综合|