簡易的漢堡選單,範例如附件
成事舍記
2015年9月7日
2009年6月4日
SQL Server 加密函數
PWDENCRYPT與PWDCOMPARE函數
而 PWDENCRYPT 與 PWDCOMPARE 函數,一個負責加密、一個負責比對,但就是沒有「解密」的函數。意思也就是說,使用 PWDENCRYPT 加密過的資料是無法反解的,類似一種 Hash 處理方法。
PWDENCRYPT 函數
注意:每次執行 pwdencrypt('xxxxx') 的結果都會不一樣,這是一種對密碼保護的機制。
PWDCOMPARE 函數
執行後的結果為 1 或 0 而已,1 代表密碼比對成功,0 代表密碼比對失敗。
這兩個 Function 在 SQL 2000, 2005, 2008 都可以使用,只是我也發現了一些不同的 SQL Server 版本之間在使用這兩個 Function 時的小差異:
而 PWDENCRYPT 與 PWDCOMPARE 函數,一個負責加密、一個負責比對,但就是沒有「解密」的函數。意思也就是說,使用 PWDENCRYPT 加密過的資料是無法反解的,類似一種 Hash 處理方法。
PWDENCRYPT 函數
select pwdencrypt('xxxxx')
注意:每次執行 pwdencrypt('xxxxx') 的結果都會不一樣,這是一種對密碼保護的機制。
PWDCOMPARE 函數
select pwdcompare('xxxxx', 加密後字串)
執行後的結果為 1 或 0 而已,1 代表密碼比對成功,0 代表密碼比對失敗。
這兩個 Function 在 SQL 2000, 2005, 2008 都可以使用,只是我也發現了一些不同的 SQL Server 版本之間在使用這兩個 Function 時的小差異:
1.使用 PWDENCRYPT 時 SQL 2000 與 SQL 2005/2008 加密過後的 hash 長度不一樣!
2.SQL 2005/2008 加密過的密碼在 SQL 2000 中無法使用 PWDCOMPARE 函數驗證密碼!
3.SQL 2005 與 SQL 2008 基本上是相容的。
4.SQL 2000 加密過的密碼雖然比較長,但在 SQL 2005/2008 中還是可以使用 PWDCOMPARE 函數驗證密碼!
2009年5月13日
XML CDATA區段
XML 對於許多人都不陌生,但還是有些地方大家不知道該如何使用,例如現在所要介紹的 CDATA 區段。
在某些時候內容中含有 HTML 標籤或者是一些特殊字元﹙如﹕<、>、&﹚,當這些字元出現在內容裡,通常都會出現 XML 分析錯誤的情況,這時候就必須將這些字元作些轉換的工作(如︰< / <、> / >、& / &)。
其實並不需要如此,CDATA 區段提供了一種通知剖析器的方法,說明 CDATA 區段所包含的字元沒有標記。
當 XML 剖析器遇到開頭的<![CDATA[,會將接下來的內容報告成字元,而不會嘗試將其解譯成項目或實體標籤。字元參考不能在 CDATA 區段內運作。當它遇到結尾的]]>時,剖析器會停止報告並回到正常的剖析,這也能使用在 HTML 文件中。使用方法為︰
<![CDATA[這裡面內容包含了 <font size="3">HTML 標籤</font>,
以前一些特殊字元 & 所以要使用 CDATA 區段包起來]]>
2009年5月12日
ASP 連結 SQL Server 2005 錯誤 '80004005'
使用 ASP 連結 SQL Server 2005 Developer Edition 時遇到一個奇怪的錯誤:
Microsoft OLE DB Provider for SQL Server 錯誤 '80004005'
[DBNETLIB][ConnectionOpen (PreLoginHandshake()).]一般網路錯誤。 查閱您的網路文件。
結果在 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1382037&SiteID=1 查到解答
原來是要開啟『SQL Server 介面區組態』,把『服務和連接的介面區組態』裡面『Database Engine』的『遠端連接』從『僅本機連接』改成『本機和遠端連接』必須包含TCP/IP
Microsoft OLE DB Provider for SQL Server 錯誤 '80004005'
[DBNETLIB][ConnectionOpen (PreLoginHandshake()).]一般網路錯誤。 查閱您的網路文件。
結果在 http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1382037&SiteID=1 查到解答
原來是要開啟『SQL Server 介面區組態』,把『服務和連接的介面區組態』裡面『Database Engine』的『遠端連接』從『僅本機連接』改成『本機和遠端連接』必須包含TCP/IP
2009年5月5日
asp動態加入xsl:include
asp動態加入xsl:include
範例如下
testXML.asp
testXML.xml
testXML.xsl
輸出結果
這裡要注意的是在testXML.xsl及unitSLT.xsl上都有<xsl:template match="/">的標籤,這樣的情況後面的tag會覆寫前面同名的tag
範例如下
testXML.asp
<%
set htPageDom = Server.CreateObject("MICROSOFT.XMLDOM")
htPageDom.async = false
htPageDom.setProperty("ServerHTTPRequest") = true
'讀取XML File
LoadXML = server.MapPath("/hyweb") & "/testXML.xml"
xv = htPageDom.load(LoadXML)
'讀取XSLT File
set oxsl = Server.CreateObject("MICROSOFT.XMLDOM")
oxsl.load(server.MapPath("/hyweb") & "/testXML.xsl")
'產生xsl:include節點
set incXML = Server.CreateObject("MICROSOFT.XMLDOM")
set incSlt = incXML.createNode(1, "xsl:include","http://www.w3.org/1999/XSL/Transform")
'加入href屬性
Set NewAttribute=incXML.createAttribute("href")
NewAttribute.Text= "unitSLT.xsl"
incSlt.SetAttributeNode NewAttribute
'插入新節點於第一個子節點之前
set oxRoot = oxsl.selectSingleNode("xsl:stylesheet")
oxRoot.insertBefore incSlt,oxRoot.firstChild
'輸出至畫面
Response.ContentType = "text/HTML"
outString = replace(htPageDom.transformNode(oxsl),"<META http-equiv=""Content-Type"" content=""text/html; charset=UTF-16"">","")
outString = replace(outString,"&","&")
response.write replace(outString,"&","&")
%>
testXML.xml
<?xml version="1.0"?>
<A name="0">
<B name="1">
<C>B1C</C>
<C>B1C2</C>
</B>
<B name="2">
<C>B2C1</C>
<C>B2C2</C>
<D>B2D1</D>
</B>
</A>
testXML.xsl
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="/">
Use Tempale testXML.xsl<br/>
<xsl:apply-templates select="A/B[1]/parent::*"/>
</xsl:template>
unitSLT.xsl
</xsl:stylesheet>
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="*|@*"/>
<xsl:if test="text()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/">
Use Tempale nuitSLT.xsl<br/>
<xsl:apply-templates select="A/B[1]"/>
</xsl:template>
</xsl:stylesheet>
輸出結果
Use Tempale testXML.xsl
<A name="0">
<B name="1">
<C>B1C</C>
<C>B1C2</C>
</B>
<B name="2">
<C>B2C1</C>
<C>B2C2</C>
<D>B2D1</D>
</B>
</A>
這裡要注意的是在testXML.xsl及unitSLT.xsl上都有<xsl:template match="/">的標籤,這樣的情況後面的tag會覆寫前面同名的tag
2009年5月3日
XPath 比較運算
若要比較 XPath 中的兩個物件,請使用 = 符號來測試是否相等,或使用 != 測試是否不相等。
若是比較運算,必須只能提供兩個運算元。接下來評估每個運算元以進行比較,再視需要予以轉換,讓它們擁有相同的型別。這個動作會根據底下說明的處理程序<比較優先順序>執行。
所有項目和屬性都是字串,但對於數字比較,則會自動轉換成整數值。在比較運算期間,常值數值會轉換成 long 或 double 型別,如下列表格所示。
如需 < 及其他二進位比較運算子的詳細資訊,請參閱底下的「二進位比較運算子」。
可在運算式中將單引號或雙引號當做字串分隔符號 (Delimiter)。這能更容易從指令碼語言中建構和傳遞模式。
範例
比較優先順序
資料型別的相關比較會遵循優先順序。
IF 至少有一個運算元是布林值 THEN 將每一個運算元轉換成布林值
ELSE IF 至少有一個運算元是數字 THEN 將每一個運算元轉換成數字
ELSE IF 至少有一個運算元是日期 THEN 將每一個運算元轉換成日期
ELSE 將兩個運算元轉換成字串。
一組二進位比較運算子會比較數字和字串並傳回布林值結果。<、<=、> 和 >= 運算子分別用於小於、小於或等於、大於,以及大於或等於。可在運算式中將單引號或雙引號當做字串分隔符號。這使得從指令碼語言中建構和傳遞模式變得更容易。
範例
範例
XML
XSLT
輸出結果
若是比較運算,必須只能提供兩個運算元。接下來評估每個運算元以進行比較,再視需要予以轉換,讓它們擁有相同的型別。這個動作會根據底下說明的處理程序<比較優先順序>執行。
所有項目和屬性都是字串,但對於數字比較,則會自動轉換成整數值。在比較運算期間,常值數值會轉換成 long 或 double 型別,如下列表格所示。
如需 < 及其他二進位比較運算子的詳細資訊,請參閱底下的「二進位比較運算子」。
常值型別 | 比較 | 範例 |
---|---|---|
String | text(lvalue) op text(rvalue) | a < GGG |
Integer | (long) lvalue op (long) rvalue | a < 3 |
Real | (double) lvalue op (double) rvalue | a < 3.1 |
可在運算式中將單引號或雙引號當做字串分隔符號 (Delimiter)。這能更容易從指令碼語言中建構和傳遞模式。
範例
運算式 | 表示 |
---|---|
author[last-name = "Bob"] | 內含至少一個 <last-name> 項目 (含值 Bob ) 的所有 <author> 項目。 |
author[last-name[1] = "Bob"] | 擁有值 Bob 的第一個 <last-name> 子項目所屬的所有 <author> 項目。 |
author/degree[@from != "Harvard"] | 包含 <degree> 項目 (含有不等於 "Harvard" 的 from 屬性) 的所有 <author> 項目。 |
author[last-name = /editor/last-name] | 包含 <last-name> 項目 (這些項目與根項目下的 <editor> 項目內部之 <last-name> 項目相同) 的所有 <author> 項目。 |
author[. = "Matthew Bob"] | 字串值為 Matthew Bob 的所有 <author> 項目。 |
比較優先順序
資料型別的相關比較會遵循優先順序。
IF 至少有一個運算元是布林值 THEN 將每一個運算元轉換成布林值
ELSE IF 至少有一個運算元是數字 THEN 將每一個運算元轉換成數字
ELSE IF 至少有一個運算元是日期 THEN 將每一個運算元轉換成日期
ELSE 將兩個運算元轉換成字串。
二進位比較運算子
一組二進位比較運算子會比較數字和字串並傳回布林值結果。<、<=、> 和 >= 運算子分別用於小於、小於或等於、大於,以及大於或等於。可在運算式中將單引號或雙引號當做字串分隔符號。這使得從指令碼語言中建構和傳遞模式變得更容易。
範例
運算式 | 表示 |
---|---|
author[last-name = "Bob" and price > 50] | 內含 <last-name> 項目 (含值 Bob ) 和 <price> 項目 (其值大於 50) 的所有 <author> 項目。 |
degree[@from != "Harvard"] | 包含不等於 "Harvard" 的 from 屬性之所有 <degree> 項目。 |
author[last-name >= "M"] | 包含 <last-name> 項目 (其值以字母 M 或之後的字母開頭) 的所有 <author> 項目。 |
book[position() <= 3] | XML 檔中的前三個 <book> 項目 (1、2、3)。 |
範例
XML
<?xml version="1.0"?>
<test>
<x a="1">
<x a="2" b="B">
<x>
<y>y31</y>
<y>y32</y>
</x>
</x>
</x>
<x a="2">
<y>y2</y>
</x>
<x a="3">
<y>y3</y>
</x>
</test>
XSLT
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<!-- Suppress text nodes not covered in subsequent template rule. -->
<xsl:template match="text()"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="*|@*"/>
<xsl:if test="text()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/test">
<xsl:apply-templates select="//x[position() = 1 ] "/>
</xsl:template>
</xsl:stylesheet>
輸出結果
<x a="1">
<x a="2" b="B">
<x>
<y>y31</y>
<y>y32</y>
</x>
</x>
</x>
<x a="2" b="B">
<x>
<y>y31</y>
<y>y32</y>
</x>
</x>
<x>
<y>y31</y>
<y>y32</y>
</x>
2009年4月29日
XPath布林、比較與設定運算式
篩選條件模式
篩選條件模式可包含布林運算式、比較運算式和設定運算式。下列表格所示的捷徑代表這個 XSL 轉換 (XSLT) 實作中所提供的替代符號。
下表顯示了比較運算子與布林運算子的優先順序 (從最高優先順序到最低優先順序)。
在 XML 文件 (例如 XSLT 樣式表) 中使用運算子時,必須分別將 < 和 > 語彙基元逸出為 < 和 >。例如,下列 XSLT 指令會在其 項目數值小於或等於 10 的所有 項目上,呼叫 XSLT 範本規則。
搭配使用 XPath 運算式與 DOM 時,不需要逸出 < 和 > 運算子。例如,下列 JScript 陳述式將選取其 項目數值小於或等於 10 的所有 項目。
布林運算式可比對特殊值的所有節點,或在特定範圍內的所有節點。以下的布林運算式範例會傳回 false。
運算子是區分大小寫的。
and 和 or 運算子
布林運算子 and 和 or 會分別執行邏輯 and 和邏輯 or 運算。搭配使用這些運算子與群組括號,即可建立複雜的邏輯運算式。
範例
not運算子
布林 not 運算子可反轉篩選條件模式中的運算式值之正負。
範例
範例
XML 檔
XSLT 檔
下列 XSLT 樣式表會選取不含任何屬性的所有 項目。
輸出
套用以上的 XML 檔轉換會產生下列結果:
篩選條件模式可包含布林運算式、比較運算式和設定運算式。下列表格所示的捷徑代表這個 XSL 轉換 (XSLT) 實作中所提供的替代符號。
運算子 | 說明 |
---|---|
and | 邏輯and |
or | 邏輯or |
not() | 否定 |
= | 相等 |
!= | 不相等 |
<* | 小於 |
<=* | 小於或等於 |
>* | 大於 |
<=* | 大於或等於 |
| | 設定運算;傳回兩組節點的聯集 |
下表顯示了比較運算子與布林運算子的優先順序 (從最高優先順序到最低優先順序)。
1 | ( ) | 群組 |
2 | [ ] | 篩選常式 |
3 | / // | 路徑運算 |
4 | < or < <= or <= > or > >= or >= | 比較 |
5 | = != | 比較 |
6 | | | 等位 |
7 | not() | 布林值not |
8 | And | 布林值and |
9 | or | 布林值or |
在 XML 文件 (例如 XSLT 樣式表) 中使用運算子時,必須分別將 < 和 > 語彙基元逸出為 < 和 >。例如,下列 XSLT 指令會在其
<xsl:apply-templates select="book[price <= 10]"/>
搭配使用 XPath 運算式與 DOM 時,不需要逸出 < 和 > 運算子。例如,下列 JScript 陳述式將選取其
var cheap_books = dom.selectNodes("book[price <= 10]");
布林運算式可比對特殊值的所有節點,或在特定範圍內的所有節點。以下的布林運算式範例會傳回 false。
1 >= 2
運算子是區分大小寫的。
and 和 or 運算子
布林運算子 and 和 or 會分別執行邏輯 and 和邏輯 or 運算。搭配使用這些運算子與群組括號,即可建立複雜的邏輯運算式。
範例
運算式 | 表示 |
---|---|
author[degree and award] | 至少包含一個 <degree> 項目和至少一個 <award> 項目的所有 <author> 項目。 |
author[(degree or award) and publication] | 至少包含一個 <degree> 或 <award> 項目,和至少一個 <publication> 項目的所有 <author> 項目。 |
not運算子
布林 not 運算子可反轉篩選條件模式中的運算式值之正負。
範例
運算式 | 表示 |
---|---|
author[degreeand not (publication)] | 至少包含一個 <degree> 項目,且不含 <publication> 項目的所有 <author> 項目。 |
author[not (degree or award) and publication] | 至少包含一個 <publication> 項目,且不含任何 <degree> 項目或 <award> 項目的所有 <author> 項目。 |
範例
XML 檔
<?xml version="1.0"?>
<test>
<x a="1">
<x a="2" b="B">
<x>
<y>y31</y>
<y>y32</y>
</x>
</x>
</x>
<x a="2">
<y>y2</y>
</x>
<x a="3">
<y>y3</y>
</x>
</test>
XSLT 檔
下列 XSLT 樣式表會選取不含任何屬性的所有
<?xml version='1.0'?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<!-- suppress text nodes not covered in subsequent template rule -->
<xsl:template match="text()"/>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="*|@*"/>
<xsl:if test="text()">
<xsl:value-of select="."/>
</xsl:if>
</xsl:element>
</xsl:template>
<xsl:template match="@*">
<xsl:attribute name="{name()}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:template>
<xsl:template match="/test">
<xsl:apply-templates select="//x[not(@*)] "/>
</xsl:template>
</xsl:stylesheet>
輸出
套用以上的 XML 檔轉換會產生下列結果:
<x>
<y>y31</y>
<y>y32</y>
</x>
訂閱:
文章 (Atom)