">                  ">

Presentation is loading. Please wait.

Presentation is loading. Please wait.

XML 進階與應用 數位芝麻網路公司 XML講師:蔡斐婷.

Similar presentations


Presentation on theme: "XML 進階與應用 數位芝麻網路公司 XML講師:蔡斐婷."— Presentation transcript:

1 XML 進階與應用 數位芝麻網路公司 XML講師:蔡斐婷

2 DTD範例 <?xml version="1.0"?>
 <!ELEMENT (TO+ , FROM , CC* , SUBJECT? , BODY?> <!ELEMENT TO (#PCDATA)>    <!ELEMENT FROM (#PCDATA)>    <!ELEMENT CC (#PCDATA)>    <!ELEMENT SUBJECT (#PCDATA)>    <!ELEMENT BODY (#PCDATA)> <!ENTITY SIGNATURE "Bill">

3 DTD範例 <?xml version="1.0"?>
<!DOCTYPE SYSTEM "mail.dtd"> < >  <SUBJECT>My First DTD</SUBJECT>  <BODY>Hello , World ! This is &SIGNATURE;. Take Care! </BODY>  <SIGNATURE>&SIGNATURE;.</SIGNATURE> </ >

4 DTD 進階 參數實體(Parameter Entities)
雖然參數實體與一般實體工作的方式相同,但是他們在語意上有個重要的不同點。參數實體在宣告和參照中都使用百分比符號 「%」。而在實體宣告中,百分比符號「%」是跟在關鍵字!ENTITY之後、實體名稱之前。如下面的例子所示(請注意在%前後的空白是必須的): <!ENTITY % ENCRYPTION "40bit CDATA #IMPLIED 128bit CDATA #IMPLIED">現在這個實體便可以在DTD文件其他的地方被參照,舉例來說: <!ELEMENT (TO+, FROM, CC*, BCC*, SUBJECT?, BODY?)>  <!ATTLIST   LANGUAGE (Western|Greek|Latin|Universal) "Weatern"   ENCRYPTED %ENCRYPTION;   PRIORITY (NORMAL|LOW|HIGH) "NOMAL">請注意除了用%代替&之外,參數實體參照(%ENCRYPTION;)使用相同基本格式來產生實體參照。而在實體參照的%記號後面也不需要加空白。 Note 參數實體僅限於在DTD中使用。您不能在XML文件元素中參照參數實體。

5 整合數個外部DTD定義 範例:Word 公文系統
<?xml version="1.0" encoding="BIG5"?> <!DOCTYPE BOOK SYSTEM "3-14.dtd"> <BOOK> <TITLE> <CAPTION>書籍資料</CAPTION> </TITLE> <BODY> <NAME>XML程式設計</NAME> <WRITER>黃中杰</WRITER> <PRICE>500</PRICE> <PUBLISHER>知城數位科技</PUBLISHER> <AMOUNT>500</AMOUNT> </BODY> </BOOK>

6 3-14.dtd <?xml version="1.0"?>
<!ENTITY % TITLE SYSTEM "3-14a.dtd"> %TITLE; <!ENTITY % BODY SYSTEM "3-14b.dtd"> %BODY; <!ELEMENT BOOK (TITLE,BODY)>

7 3-14a.dtd <?xml version="1.0"?> <!ELEMENT TITLE (CAPTION)>
<!ELEMENT CAPTION (#PCDATA)>

8 3-14b.dtd <?xml version="1.0"?>
<!ELEMENT BODY (NAME,WRITE,PRICE,PUBLISHER)> <!ATTLIST BODY LANGUAGE (English|Chinese|Japanese) "Chinese" ENCRYPTED CDATA #IMPLIED PRIORITY (NORMAL|HIGH|LOW) "NORMAL"> <!ELEMENT NAME (#PCDATA)> <!ELEMENT WRITER (#PCDATA)> <!ELEMENT PRICE (#PCDATA)> <!ATTLIST PRICE HIDDEN CDATA #FIXED "TRUE"> <!ELEMENT PUBLISHER (#PCDATA)>

9 XSL Pattern語法與範例 / 若一個模式是以/字元作開頭,則表示要由 XML文件的根節點開始運作
// 若一個模式是以//字元作開頭,可以匹配旗 下任意深度的節點 . 指的是目前所採用的節點 @ 用來指明某特定屬性 * 萬用字元,選擇任一元素 @* 屬性的萬用字元 ! 對特定節點用某個XSL 資訊方法 示範pattern

10 / 我們可以在一個查詢之前使用單一的前置斜線(/),來指定目錄與文件的root層級是相關的(假如我們未加上前置斜線,則會預設所表示的是root層級,所以不一定總是需要斜線)。這個情形如下所示: /CATALOG/PLANT/LIGHT這告訴處理器從文件的root層級開始尋找CATALOG/PLANT/LIGHT型態,既然root層級可以不需加上前置斜線(/),同樣的查詢方式可能為: CATALOG/PLANT/LIGHT

11 // 另一個選擇(Selection)運算元為兩條前置斜線(//),此運算元表示遞迴下降;也就是說,該查詢要求每一個型態的實例(instance),這個型態顯示在運算元的右邊,並且位於顯示在運算元左邊型態的下面。比方說,查詢CATALOG//LIGHT表示尋找所有在Catalog節點之下的Light節點,而查詢//LIGHT表示尋找文件中所有的Light節點。 為了測試這一點,請改變文字碼9-4中的查詢成為下述的樣子: var qry=xmlDoc.selectNodes("//LIGHT“)

12 [ ] 次查詢(Subqueries) 一個次查詢提供一個機制來限制查詢,我們可以透過插入型態到次查詢運算元中,來加入一個條件判斷到查詢型態中。而產生的結果就是符合次查詢標準的所有元素集合。比方說,查詢型態CATALOG/PLANT[ZONE]表示:尋找所有Catalog元素的子元素Plant,而Plant元素中至少包含一個Zone元素。 Note 次查詢的子句有點像是SQL語法的WHERE子句,所以使用這樣的說法,則將上面的查詢看成SQL語法,就是:尋找ANY Catalog元素的子元素Plant,WHERE Plant元素至少要存在一個Zone元素為TRUE。

13 XSLT 進階—表格套用 StudentOrg.xml Student.xml

14 XSLT 進階—排序 <?xml version="1.0" encoding="Big5"?>
<xsl:stylesheet xmlns:xsl=" <xsl:template match="/"> <HTML> <BODY> <CENTER><H1>學生成績排序</H1> <HR width="80%"/><TABLE width="80%"><TR bgcolor="orange"> <TD>姓名</TD><TD>住址</TD><TD>第一次段考成績</TD><TD>第二次段考成績</TD> </TR> <xsl:for-each select="grade/student" order-by="- number(grade1)"> <TR> <TD><xsl:value-of select="name"/></TD> <TD><xsl:value-of select="address"/></TD> <TD><xsl:value-of select="grade1"/></TD> <TD><xsl:value-of select="grade2"/></TD> </xsl:for-each> </TABLE> </CENTER></BODY> </HTML> </xsl:template> </xsl:stylesheet> 請將排序項目改為第二次段考成績

15 XSL 進階:邏輯運算 Number( ) <xsl:if test=“name[.=‘伍堯峰’]”>
<xsl:if test="number(grade1)[.<60]">

16 XSL 進階:Java Script 運用Java Script 將XML 的資料,作簡單的運算:StudentAvg.xsl
運用Java Script 運用DOM 的API,處理XML內容:TestXML.htm 運用Java Script + CSS + Xsl 做到動態網頁的效果

17 StudentAvg.xsl <xsl:script language="Javascript">
function getAverage(item) { var gFirst = item.selectSingleNode("grade1").nodeTypedValue; var gSecond = item.selectSingleNode("grade2").nodeTypedValue; return (1*gFirst+1*gSecond)/2; } </xsl:script> <TD><xsl:eval language="Javascript">getAverage(this);</xsl:eval> </TD>

18 TestXML.htm <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML><HEAD> <SCRIPT LANGUAGE="JavaScript" FOR=window EVENT=onload> loadDoc() </SCRIPT> <SCRIPT LANGUAGE="JavaScript"> var xmlDoc = new ActiveXObject("microsoft.xmldom"); xmlDoc.load("hello.xml"); function loadDoc() { if (xmlDoc.readyState == "4") start() else window.setTimeout("loadDoc()", 4000); }

19 TestXML.htm function start() { var rootElem = xmlDoc.documentElement;
var toVar = rootElem.childNodes.item(0).text; alert (toVar); var toVar = rootElem.childNodes.item(1).text; var toVar = rootElem.childNodes.item(2).text; } </SCRIPT> <TITLE>Code Listing 5-6</TITLE> </HEAD> <BODY> </BODY> </HTML>

20 XML 應用 以e-mail Transfer 元件搭配XML應用 Dim oMail As New CDONTS.NewMail
Dim oDOM As MSXML.DOMDocument Set oDOM = New MSXML.DOMDocument Dim strPath As String strPath = App.Path & "\" & "student.xml" If oDOM.Load(App.Path & "\" & "studentMail.xml") Then MsgBox "OK" Else MsgBox "Fail" End If Dim DomElement As MSXML.IXMLDOMElement Dim NodeList As MSXML.IXMLDOMNodeList

21 XML 應用 Set NodeList = oDOM.getElementsByTagName("student")
Set DomElement = oDOM.documentElement Dim gradeAvg As Integer gradeAvg = (CInt(DomElement.getElementsByTagName("grade1").Item(0).Text) + CInt(DomElement.getElementsByTagName("grade2").Item(0).Text)) / 2 Dim studentName As String MsgBox DomElement.getElementsByTagName("name").Item(0).Text studentName = DomElement.getElementsByTagName("name").Item(0).Text MsgBox DomElement.childNodes.Item(2).Text MsgBox DomElement.getElementsByTagName(" ").Item(0).Text

22 XML 應用 oMail.Subject = "成績通知單" oMail.From = "Silvia_Tsai@d11e.com"
oMail.To = DomElement.getElementsByTagName(" ").Item(0).Text If gradeAvg < 60 Then oMail.Body = "親愛的" & studentName & "同學" & "您自然科成績為:" & gradeAvg & "低於60" & _ "請於3月15日至教務處補考" ElseIf gradeAvg >= 60 And gradeAvg <= 80 Then oMail.Body = "親愛的" & studentName & "同學" & "您自然科成績:" & gradeAvg & _ "表現的不錯,下學期加油喔!" ElseIf gradeAvg > 80 Then "表現得非常好,下學期要繼續保持喔!" End If oMail.Send

23 未來展望 programmer可使用元件,減少開發時程,同時透過SOAP,預估未來是個網站元件化的時代,世界各地所有的軟體工程師,所code出的網站功能,都可供programmer引用,一個web services的時代,即將來臨。所以一個網站可能賣的不是產品,而是信用卡付款或網路競標的元件。


Download ppt "XML 進階與應用 數位芝麻網路公司 XML講師:蔡斐婷."

Similar presentations


Ads by Google