<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      C#發(fā)現(xiàn)之旅第二講 C#-XSLT開發(fā)

      C#發(fā)現(xiàn)之旅第二講 C#XSLT開發(fā)

      袁永福 2008-5-15

      系列課程說明

          為了讓大家更深入的了解和使用C#,我們開始這一系列的主題為“C#發(fā)現(xiàn)之旅”的技術(shù)講座。考慮到各位大多是進行WEB數(shù)據(jù)庫開發(fā)的,而所謂發(fā)現(xiàn)就是發(fā)現(xiàn)我們所不熟悉的領(lǐng)域,因此本系列講座內(nèi)容將是C#在WEB數(shù)據(jù)庫開發(fā)以外的應(yīng)用。目前規(guī)劃的主要內(nèi)容是圖形開發(fā)和XML開發(fā),并計劃編排了多個課程。在未來的C#發(fā)現(xiàn)之旅中,我們按照由淺入深,循序漸進的步驟,一起探索和發(fā)現(xiàn)C#的其他未知的領(lǐng)域,更深入的理解和掌握使用C#進行軟件開發(fā),拓寬我們的視野,增強我們的軟件開發(fā)綜合能力。

      本系列課程配套的演示代碼下載地址為 https://files.cnblogs.com/xdesigner/cs_discovery.zip
      本系列課程已發(fā)布的文章有
      C#發(fā)現(xiàn)之旅第一講 C#-XML開發(fā)
      C#發(fā)現(xiàn)之旅第二講 C#-XSLT開發(fā)
      C#發(fā)現(xiàn)之旅第三講 使用C#開發(fā)基于XSLT的代碼生成器
      C#發(fā)現(xiàn)之旅第四講 Windows圖形開發(fā)入門
      C#發(fā)現(xiàn)之旅第五講 圖形開發(fā)基礎(chǔ)篇
      C#發(fā)現(xiàn)之旅第六講 C#圖形開發(fā)中級篇
      C#發(fā)現(xiàn)之旅第七講 C#圖形開發(fā)高級篇
      C#發(fā)現(xiàn)之旅第八講 ASP.NET圖形開發(fā)帶超鏈接的餅圖
      C#發(fā)現(xiàn)之旅第九講 ASP.NET驗證碼技術(shù)
      C#發(fā)現(xiàn)之旅第十講 文檔對象模型

      本課程說明

      本課程介紹XPath和XSLT的基本概念,并介紹了如何在C#中使用這些技術(shù)。

      XPath介紹

          XPath是從XML基礎(chǔ)規(guī)范上派生的技術(shù),專門用于快速檢索和查詢XML文檔,使用方便,功能強大,XPath也是XSLT技術(shù)的基礎(chǔ)。

          XPathW3C國際標準組織定義的用于在單個XML文檔中快速檢索和定位XML文檔節(jié)點的規(guī)范,它也是跨平臺的,若一些軟件支持XPath,則必然是支持標準的XPath語法。因此無論是JAVA還是C#都是支持相同語法的XPath

          我們理解XPath時可以參考文件目錄結(jié)構(gòu)FilePath,在Windows資源管理器左邊的文件目錄樹狀列表中,可以看到各種文件對象,包括磁盤根目錄,各級文件目錄等等,它們共同構(gòu)成了一個樹狀結(jié)構(gòu),我們選擇對象時既可以在這個樹狀結(jié)構(gòu)中一個個查找,也可以指定路徑名來進行快速定位,文件系統(tǒng)的路徑名采用斜杠號來分隔各個目錄層次的目錄名。比如在這個示意圖中,我們選中的目錄,可以使用路徑名c:\documents and settings\袁永福來快速定位。

          而XML文檔中也是這種樹狀層次結(jié)構(gòu),因此我們也可以套用這種文件路徑名的概念到XML文檔中,于是形成了XPath路徑。我們處理XML文檔時可以一層層查找所需的XML節(jié)點,也可以指定XPath路徑字符串來快速定位XML節(jié)點。在XPath路徑中,我們使用反斜杠符號來分隔各個層次的XML元素的名稱。

          在文件目錄系統(tǒng)中,我們可以可以使用絕對路徑名,也可以使用相對路徑名,我們可以使用一個點號表示當(dāng)前目錄,使用兩個點表示父目錄。在XPath中我們也套用了類似的概念,我們從XML文檔根節(jié)點出發(fā)而指定的XPath路徑為絕對路徑,從某個XML節(jié)點開始轉(zhuǎn)到其它節(jié)點所經(jīng)過的路徑為相對路徑,我們也使用一個點表示當(dāng)前節(jié)點,也使用兩個點來表示父節(jié)點。其實我們可以將絕對路徑看成從根節(jié)點出發(fā)的相對路徑。

          在這個示意圖中,第一個選中的節(jié)點可以使用XPath路徑“Table/Record/Country”來快速定位。

          在文件目錄系統(tǒng)中,同一個目錄下面不能有相同名稱的對象,因此相對路徑名和絕對路徑名都能準確的定位到一個目錄上,而在XML文檔中,同一個XML節(jié)點下可以存在多個具有相同名稱的子節(jié)點,因此XPath路徑可能無法唯一的確定一個XML節(jié)點。此時XPath采用了內(nèi)嵌條件判斷語句的方法來解決這個問題。XPath路徑字符串中可以使用一對方括號來包含一個邏輯表達式,在這個表達式中可以使用字符串判斷,數(shù)學(xué)四則運算,邏輯判斷和一些預(yù)定義函數(shù),而且XPath路徑中每個層次都能包含表格式,因此XPath的邏輯判斷的功能是非常強大的。

          在示意圖中,我們使用XPath路徑Table/Record[CustomerID=’ANATR’]/Phone來快速定位第二個節(jié)點,此處使用了一段方括弧包含了一個邏輯表達式。表示查找某個節(jié)點,該節(jié)點下的CustoemrID子節(jié)點的文本值等于 “ANATR”

          XPath是一種國際標準,但在微軟的.NET框架當(dāng)然支持這個國際標準。我們可以使用.NET類庫中的System.Xml.Xsl.XslTransform類型來執(zhí)行XSLT轉(zhuǎn)換。這個類型除了支持標準的XPath外,還進行一些擴展,主要是能擴展使用開發(fā)者自己定義的函數(shù)。

          使用XPath,我們可以很方便的搜索XML文檔中的任何部分,因此具有很好的數(shù)據(jù)檢索分析功能,近期業(yè)界興起的半結(jié)構(gòu)化文檔技術(shù)大多就是以XPath為基礎(chǔ)的。

          由于XPath技術(shù)是相當(dāng)強的,而且是國際標準,跨平臺的,因此大家有時間好好學(xué)習(xí)使用它。對于XPath的詳細語法可訪問網(wǎng)站 http://www.w3.org/TR/xpath ,若大家安裝了MSDN2003版,也可參考 MSDN Library/XML Web Services/XML核心/SDK 文檔/MSXML4.0 SDK/XPath Reference。這些電子文檔全是英文,大家也可以購買一些專門講述XML技術(shù)的中文書籍看看。

       XSLT介紹

          XSLT是一種將XML文檔轉(zhuǎn)換為其他文本文檔的語言,是建立在XMLXPath之上的國際標準,內(nèi)容比較多,功能強大。

          對于編程人員來說,XSLT可以看作以前序遍歷的方式專門處理XML樹狀結(jié)構(gòu)的標記語言。以前編程根據(jù)XML文檔輸出純文本數(shù)據(jù)時需要寫代碼以前序遍歷方式的方式遍歷XML文檔對象組成的樹狀結(jié)構(gòu),對于每一個特定名稱或特定層次的XML節(jié)點而輸出不同的內(nèi)容,這個過程比較復(fù)雜,代碼量大,需用進行很多的狀態(tài)判斷。而XSLT則使用一種簡潔明了的標記語言實現(xiàn)了相同的邏輯。因此XSLT從程序邏輯的角度看類似支持遞歸的編程語言,而且是專門處理XML文檔的。

          XSLT轉(zhuǎn)換過程會涉及到三個文本文檔,一個是要處理的原始XML文檔,第二個就是XSLT樣式表文檔,該文檔包含了XSLT代碼,XSLT代碼本身就是XML格式,但使用了XML的名稱空間。第三個就是XSLT處理輸出的文本文檔,注意,此處輸出的是純文本文檔,這個文檔具體是什么格式完全靠XSLT代碼來決定,可以是另外一個XML文檔,HTML文檔,SQL語句字符串或者其他任意格式的字符串?dāng)?shù)據(jù)等等,XSLT轉(zhuǎn)換只能輸出純文本文檔,此外就沒有限制輸出文檔的具體格式。


      XSLT
      范例

          下面使用一個XSLT范例來說明XSLT處理過程。

          在這個示意圖中有三個圖片,第一個是原始的包含數(shù)據(jù)的XML文檔,第二個是XSLT樣式表文檔的內(nèi)容,第三個就是轉(zhuǎn)換結(jié)果。XSLT代碼如下

      <xsl:stylesheet version='1.0' xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
          <xsl:output method='xml' />
          <xsl:template match='/'>
              <html>
                  <body>
                      <table border='1'>
                          <xsl:for-each select="Table/Record">
                              <tr>
                                  <xsl:for-each select="*">
                                      <td>
                                          <xsl:value-of select="." />
                                      </td>
                                  </xsl:for-each>
                              </tr>
                          </xsl:for-each>
                      </table>
                  </body>
              </html>
          </xsl:template>
      </xsl:stylesheet>

          數(shù)據(jù)XML文檔是一個很簡單的XML文檔,此處不加說明了。重點說說XSLT樣式表文檔,可以看到XSLT樣式表文檔本身一個XML文檔。它采用XML的樹狀結(jié)構(gòu)來描述遞歸處理過程,也比較好理解。

          在樣式表文檔中,根元素為 xsl:stylesheet ,里面定義了一個名為xsl的名稱空間,這個根節(jié)點及其屬性值都是固定的。

      xsl:output 元素是可選的,它的method屬性用于指定輸出文檔的格式,可以設(shè)置為xmlhtmltext值。此處使用xml輸出樣式,說明輸出的文檔是XML格式的,XSLT轉(zhuǎn)換會盡量生成XML文檔,但不作保證,因此仍然有可能生成不合格的XML文檔。

          xsl:template 用于定義一個XSLT模板,模板類似編程語言中的函數(shù),可實現(xiàn)XSLT代碼的重用。模板可以使用name屬性定義名稱,也可以使用match屬性定義匹配的XPath路徑,這個模板使用了match屬性來匹配XML文檔本身。

          然后是 html 元素,由于html元素沒有使用xsl的前綴,因此不屬于xslt代碼,因此將原樣輸出,跟著后面的bodytable元素也是一樣的。

          xsl:for-each 元素類似C#中的foreach 語法結(jié)果,表示循環(huán)遍歷元素,它使用select屬性指定一個XPath相對路徑,XSLT使用這個相對路徑查詢所有要遍歷的XML節(jié)點,此時當(dāng)前節(jié)點就是XML文檔本身,因此XSLT處理器會調(diào)用XmlDocumentSelectNodes 函數(shù)來獲得要遍歷的XML節(jié)點,函數(shù)的參數(shù)就是Table/Record。于是我們開始循環(huán)遍歷所有的Record元素了。

          在循環(huán)遍歷Record元素時,對每一個Record元素都要輸出xsl:for-each的子節(jié)點,首先是 tr 元素,這不是XSLT元素,因此原樣輸出。這里還套嵌定義了另外一個for-each元素,于是我們又開始了一個新的循環(huán)遍歷了,新的循環(huán)指定的相對XPath路徑是一個星號,表示匹配所有名稱的子元素,這類似DOS命令Dir中使用星號匹配所有文件。此處表示循環(huán)遍歷Record元素下面所有的字段元素。

          對每一個字段元素,首先輸出td 元素,然后處理xsl:value-of 元素,xsl:value-of 表示輸出指定相對路徑的節(jié)點的值,這里指定的XPath是一個點號,表示當(dāng)前節(jié)點本身,由于當(dāng)前節(jié)點是XML元素,因此也就輸出元素的文本內(nèi)容,相當(dāng)于輸出XmlElementInnerText 屬性值。

          為了讓大家更清楚的了解
      XSLT執(zhí)行過程,我寫了一段C#代碼來模擬實現(xiàn)這個XSLT轉(zhuǎn)換過程,代碼在演示程序的 codexslt.aspx 中。代碼如下

      // 此處代碼動態(tài)構(gòu)造 xml 文檔對象結(jié)構(gòu)來輸出XML文檔
      System.Xml.XmlDocument XmlDoc = new System.Xml.XmlDocument();
      -------------- 查詢數(shù)據(jù)庫,填充XmlDoc --------------------------
      // 保存輸出結(jié)果的緩沖區(qū)
      System.IO.StringWriter myResult = new System.IO.StringWriter();
      myResult.WriteLine("<html>");
      myResult.WriteLine("    <body>");
      myResult.WriteLine("        <table border='1'>");
      // 模擬 <xsl:for-each select="Table/Record">
      foreach( System.Xml.XmlNode node in XmlDoc.SelectNodes("Table/Record"))
      {
          myResult.WriteLine("        <tr>");
          // 模擬 <xsl:for-each select="*">
          foreach( System.Xml.XmlNode node2 in node.SelectNodes("*"))
          {
              myResult.Write("            <td>");
              // 模擬 <xsl:value-of select="." />
              myResult.Write( node2.InnerText );
              myResult.WriteLine("</td>");
          }
          myResult.WriteLine("        </tr>");
      }
      myResult.WriteLine("        </table>");
      myResult.WriteLine("    </body>");
      myResult.WriteLine("</html>");
      myResult.Close();

          代碼很簡單,這里我就不詳細說明了。

          這里只是展示了一個非常簡單的XSLT轉(zhuǎn)換過程,XSLTXPath語法不少,但花點時間是可以記下來的,編寫XSLT模板是很有技巧性的。一般的我們要設(shè)計XSLT模板,首先獲得要轉(zhuǎn)換的XML文檔樣本以及所需轉(zhuǎn)換結(jié)果的樣本,這兩個樣本可能相差非常大,所有的差別都需要依靠XSLT轉(zhuǎn)換模板來彌補,此時XSLT模板的編寫不只是XSLT元素和函數(shù)的堆砌,而是需要同時兼顧輸入和輸出,還需要使用面向過程的編程思想。有時還需要編程對XSLT轉(zhuǎn)換器進行擴展。

      XML/XSLTWEB開發(fā)中的應(yīng)用

          XML/XSLT技術(shù)在WEB開發(fā)中可以發(fā)揮很大的應(yīng)用,可以為WEB開發(fā)提供一種新的HTML頁面生成方式。

          一般的在WEB開發(fā)中使用XML/XSLT技術(shù)主要有兩種模式,一個是在服務(wù)器端執(zhí)行XSLT轉(zhuǎn)換,另一個是在客戶端執(zhí)行XSLT轉(zhuǎn)換。

          在服務(wù)器端執(zhí)行XSLT轉(zhuǎn)換時,應(yīng)用系統(tǒng)的業(yè)務(wù)模塊生成包含要顯示的數(shù)據(jù)的XML文檔,然后調(diào)用事先寫好的XSLT模板文檔,執(zhí)行XSLT轉(zhuǎn)換,轉(zhuǎn)換結(jié)果一般是HTML文檔,當(dāng)然也可以是其他類型的文本文檔,此時客戶端就可以將生成的HTML文檔直接作為頁面響發(fā)送到客戶端瀏覽器中。客戶端瀏覽器接受HTML文檔并顯示出來。在這個過程中,服務(wù)器端生成的XML文檔,XSLT轉(zhuǎn)換生成的HTML文檔都是臨時生成的文檔,都可以存留在內(nèi)存中,用完即可清除掉,不需要寫到磁盤文件中。

          在客戶端執(zhí)行XSLT轉(zhuǎn)換時,應(yīng)用系統(tǒng)的業(yè)務(wù)模塊生成包含要顯示的數(shù)據(jù)的XML文檔,加上XSLT轉(zhuǎn)換信息標記,直接發(fā)送到客戶端瀏覽器,客戶端瀏覽器獲得這個XML文檔,根據(jù)其中的XSLT轉(zhuǎn)換信息標記,從服務(wù)器上下載指定名稱的XSLT文檔。然后調(diào)用自己的XSLT轉(zhuǎn)換器進行轉(zhuǎn)換,在內(nèi)存中生成了HTML文檔并顯示出來。此時顯示的HTML頁面不會出現(xiàn)在瀏覽器的緩沖文件夾中,也看不到HTML源代碼,只能看到XML的源代碼。

          由于XSLT轉(zhuǎn)換是國際標準,在服務(wù)器端的轉(zhuǎn)換結(jié)果和在客戶端的轉(zhuǎn)換結(jié)果是一樣的。因此兩種模式下瀏覽器中顯示的頁面內(nèi)容是一樣的。

          在傳統(tǒng)的
      WEB開發(fā)中,我們都是直接使用業(yè)務(wù)系統(tǒng)拼湊出HTML字符串來生成要顯示的HTML頁面。雖然在ASP.NET中大量使用Web控件來簡化開發(fā),但web控件內(nèi)部還是拼湊HTML字符串的。使用程序代碼來拼湊HTML字符串會影響程序代碼的可讀性,很容易使得程序代碼雜亂無章,而且生成的HTML可讀性差。

          若使用XML/XSLT技術(shù)則可以有效的改善這種情況,由于XML文檔格式檢查非常嚴格,因此這就使得程序代碼生成XML文檔過程準確,不得出現(xiàn)錯誤,在這個環(huán)境下迫使程序員注意保持程序代碼質(zhì)量。而且生成的XML文檔不只用于生成HTML頁面,還能方便的向其他程序模塊提供數(shù)據(jù),并可充當(dāng)WebService

          考察WEB應(yīng)用中生成的HTML代碼,可以發(fā)現(xiàn),大量的HTML頁面中用于實現(xiàn)頁面各種動態(tài)效果和頁面格式的HTML代碼多于直接顯示數(shù)據(jù)的HTML代碼,而且HTML代碼普遍重復(fù)。這使得HTML頁面代碼臃腫,文件大,這會使得客戶端瀏覽器下載頁面緩慢。當(dāng)采用XML/XSLT技術(shù)并在客戶端執(zhí)行XSLT轉(zhuǎn)換時,由于服務(wù)器端發(fā)送的XML文檔非常簡潔,只包含純粹的數(shù)據(jù),并沒有其他冗余的代碼,因此文檔小,下載快。與之配套的XSLT模板也是經(jīng)過分析處理的,代碼重復(fù)少,因此XSLT文件也小,這樣客戶端瀏覽器以前要下載一個很大的HTML文檔,而現(xiàn)在只要下載兩個較小的文檔,這縮短了瀏覽器下載數(shù)據(jù)的時間。

          除了改善數(shù)據(jù)傳輸過程,瀏覽器自己執(zhí)行XSLT轉(zhuǎn)換,這樣能將一部分的工作量從服務(wù)器端轉(zhuǎn)移到客戶端,此時服務(wù)器端只要快速生成包含數(shù)據(jù)的XML文檔即完成工作。由于XSLT是廣泛采用的國際標準,此時WEB系統(tǒng)能可靠的使用客戶端的運算能力,從而減少服務(wù)器端運算壓力,而利用客戶端長期閑置的運算能力。

          雖然XML/XSLT技術(shù)具有很大的優(yōu)勢,但在實際開發(fā)中仍然存在不小的問題,其中最大的問題就是編制XSLT模板文件成本高。我們在開發(fā)WEB系統(tǒng)中使用了很多開發(fā)工具,包括VS.NETWEB窗體設(shè)計器,美工人員使用的FrontPageDreamwave等等,都是用于生成HTML文檔的,而HTML文檔要求不嚴格,很多內(nèi)容還不符合XML規(guī)范,因此需要使用各種方法將這些HTML文檔轉(zhuǎn)換為標準的XML文檔,然后還需要分析頁面結(jié)構(gòu),將這些XML文檔加工成XSLT文檔。在目前的技術(shù)條件下,這個過程成本比較大,使得XML/XSLT技術(shù)難于推廣和普及。在此建議大家多多思考,如何低成本的將HTML文檔轉(zhuǎn)換為XSLT文檔。

          而且XML/XSLT技術(shù)調(diào)試比較困難,對開發(fā)者要求很高,這也加大了這個技術(shù)的應(yīng)用成本。而且目前的web系統(tǒng)中大量使用的WEB控件沒有考慮到XML/XSLT技術(shù),這也阻礙了這種新技術(shù)的應(yīng)用。

      使用C#執(zhí)行XSLT轉(zhuǎn)換

          在演示程序中,其中有些代碼就是使用C#來執(zhí)行XSLT轉(zhuǎn)換的。

      record.aspx

          演示程序中record.aspx演示了在服務(wù)器端執(zhí)行XSLT轉(zhuǎn)換,打開這個頁面的C#代碼中,在Page_Load函數(shù)中,首先是查詢數(shù)據(jù)庫并生成一個包含數(shù)據(jù)的XML文檔。然后我們使用了一個名為xsl的頁面參數(shù),這個參數(shù)就指定了使用XSLT模板文件。若用戶指定了該參數(shù),我們開始執(zhí)行XSLT轉(zhuǎn)換。

          首先是創(chuàng)建一個XslTransform對象,調(diào)用它的Load函數(shù)來加載用戶指定的XSLT模板文件,然后調(diào)用它的Transform函數(shù),這個函數(shù)有四個參數(shù),第一個就是包含數(shù)據(jù)的XML文檔對象,第二個是XSLT轉(zhuǎn)換參數(shù)的列表,此處未用,第三個就使輸出轉(zhuǎn)換結(jié)果的流對象,我們就使用頁面輸出流,最后一個是XML文檔解析對象,此處未用。

      string strXSLRef = this.Request.QueryString["xsl"] ;
      if( strXSLRef != null && strXSLRef.Length > 0 )
      {
          // 根據(jù)頁面參數(shù)指定的XSLT樣式表名稱執(zhí)行XSLT轉(zhuǎn)換
          strXSLRef = this.Server.MapPath( strXSLRef );
          System.Xml.Xsl.XslTransform transform = new System.Xml.Xsl.XslTransform();
          transform.Load( strXSLRef );
          transform.Transform( XmlDoc , null , this.Response.Output , null );
      }

          可以看到在C#中執(zhí)行XSLT轉(zhuǎn)換是非常簡單的,只要創(chuàng)建一個XslTransform對象,使用Load函數(shù)加載XSLT模板,使用Transform函數(shù)來執(zhí)行XSLT轉(zhuǎn)換即可。

      recordxml.aspx

          演示程序中的recordxml.aspx演示了在客戶端執(zhí)行XSLT轉(zhuǎn)換,打開這個頁面的C#代碼,在Page_Load函數(shù)中,可以看到是查詢數(shù)據(jù)庫并使用XmlTextWriter輸出包含數(shù)據(jù)的XML文檔。其中有這么一段代碼,首先判斷一個名為xsl的頁面參數(shù)是否存在,若存在則調(diào)用xmlwriterWriteProcessingInstruction方法輸出一段名為 xml-stylesheetXML指令,這個指令的 href 屬性值就使頁面參數(shù)指定的XSLT模板文件名。

      // 輸出XSLT樣式表信息頭
      string strXSLRef = this.Request.QueryString["xsl"] ;
      if( strXSLRef != null && strXSLRef.Length > 0 )
      {
          xmlwriter.WriteProcessingInstruction(
              "xml-stylesheet" ,
              "type='text/xsl' href='" + strXSLRef + "'");
      }

          客戶端瀏覽器解析下載的XML文檔,若遇到這個這段XML指令根據(jù)其中的href屬性下載XSLT模板文件,然后執(zhí)行XSLT轉(zhuǎn)換,將生成的轉(zhuǎn)化結(jié)果再作為HTML文檔顯示出來。

          在這個頁面中,服務(wù)器端只負責(zé)輸出數(shù)據(jù)XML文檔,并提供XSLT模板文件下載,而XSLT轉(zhuǎn)換就給客戶端瀏覽器處理,這樣就能減少服務(wù)器端的工作量并利用客戶端的運算能力。

          注意這里的xml-stylesheet指令只對瀏覽器有效,一般其他的程序處理XML文檔時會忽略掉這個XML指令。即使我們在服務(wù)器端使用XslTransform對象執(zhí)行XSLT轉(zhuǎn)換,這個XML指令也是毫無作用的,就像不存在一樣。

      使用C#執(zhí)行XPath查詢

          演示程序中的recordxpath.aspx就演示了使用C#執(zhí)行XPath查詢。打開這個頁面的界面設(shè)計,可以看到其界面是比較簡單地,其中一個單行文本框用于輸入XPath字符串,一個大的多行文本框用于顯示查詢結(jié)果,還有一個按鈕用于點擊執(zhí)行操作。頁面代碼主要在這個按鈕的點擊事件處理中。

          雙擊這個按鈕,可以看到該按鈕的點擊事件處理代碼。在該處理中,首先調(diào)用CreateRecordXMLDocument函數(shù)來獲得包含數(shù)據(jù)的XML文檔對象,生成XML文檔的過程可以參考record.aspx的說明。

          程序生成包含數(shù)據(jù)的XML文檔后,在從單行的文本輸入框獲得用戶輸入的XPath字符串,若用戶輸入的內(nèi)容,則對XML文檔的根節(jié)點調(diào)用SelectNodes方法,執(zhí)行XPath查詢,SelectNodes函數(shù)返回一個XmlNodeList列表,該列表中的元素類型是XmlNode。我們遍歷這個列表,對其中每一個XML節(jié)點對象獲得它的XML字符串,然后進行輸出。

          若用戶沒有輸入XPath字符串,則直接輸出XML文檔根節(jié)點的內(nèi)容。

          在這里我們定義了GetXMLString 函數(shù),這個函數(shù)主要是返回指定的XML節(jié)點對象的帶縮進的XML字符串。用于取代Xml節(jié)點的OuterXml屬性。

      小結(jié)

          在本課程中,我們了解了XPathXML/XSLT的基礎(chǔ)知識。并演示使用C#使用XPathXML/XSLT技術(shù)。

          XML及其派生的技術(shù)都是很重要的國際標準技術(shù),對現(xiàn)代WEB開發(fā)具有很大的影響力,XML技術(shù)是一種優(yōu)質(zhì)的軟件開發(fā)技術(shù),因此大家要花點時間好好學(xué)習(xí),熟練掌握XML及其派生技術(shù)將大大提高大家的軟件開發(fā)能力。

      posted on 2008-05-19 08:54  袁永福 電子病歷,醫(yī)療信息化  閱讀(10347)  評論(25)    收藏  舉報

      導(dǎo)航

      主站蜘蛛池模板: julia无码中文字幕一区| 欧美日韩视频综合一区无弹窗| 久久国产精品免费一区| 国产亚洲精品久久久久久无亚洲| 韩国福利视频一区二区三区| 亚洲永久精品一区二区三区| 呼和浩特市| 亚洲国产综合一区二区精品| av小次郎网站| 亚洲日本va午夜在线电影| 麻豆tv入口在线看| 亚洲中文字幕一区二区| 国内在线视频一区二区三区| 青青草成人免费自拍视频| 国产成人精品无码播放| 欧美叉叉叉bbb网站| 无码乱人伦一区二区亚洲| 性欧美VIDEOFREE高清大喷水| 国产 精品 自在 线免费| 亚洲精品国产精品乱码不卡| 资源新版在线天堂偷自拍| 国产精品久久久久久无毒不卡| 99久久久国产精品免费无卡顿| 99久久亚洲综合精品成人网| 国产精品成人久久电影| 一本色道久久—综合亚洲| 蜜臀久久综合一本av| 国产热の有码热の无码视频| 亚洲欧美一区二区成人片| 午夜免费无码福利视频麻豆| 少妇高潮喷水久久久影院| 污污网站18禁在线永久免费观看 | A级毛片100部免费看| 高台县| 99热久久这里只有精品| 久久精品国产再热青青青| 庄浪县| 极品人妻少妇一区二区三区| 人成午夜免费大片| 欧美和黑人xxxx猛交视频| 乱中年女人伦av三区|