乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      在PHP中運行XPath查詢

       Ralf_Jones 2006-03-24
      --------------------------------------------------------------
      此文章打印自Builder.com.cn。
      --------------------------------------------------------------
      在PHP中運行XPath查詢
      Builder.com
      30/3/2005
      URL: http://www./developer/webdevelop/story/0,3800067013,39360703,00.htm

      XPath是一種可以對XML文檔中的某一部分進行單獨處理的一種語言,對于XSLT轉(zhuǎn)換而言它尤其重要。XPath也可作為單獨的工具管理應(yīng)用程序中的XML數(shù)據(jù),比如網(wǎng)絡(luò)應(yīng)用程序。

      微軟通過selectSingleNode() 和selectNodes()方法來提供的XPath功能,從而實現(xiàn)對DOM()節(jié)點和文檔的操作。然而,PHP是通過程序中的環(huán)境(context)來實現(xiàn)XPath功能的。我將舉例來說明如何利用PHP代碼從XML文檔中抽取不同的數(shù)據(jù)片斷,并隨后解釋這些PHP代碼是如何工作的。

      在這個例子中,我使用了以下的XML數(shù)據(jù)。(注意:這些代碼是在PHP 4.3.4、Windows XP和IIS 5.1條件下開發(fā)并運行成功的。)

      <?xml version="1.0"?>

      <x:rootxmlns:x="http://www.">

      <x:row>

      <x:dog

      color="yellow">Marmaduke</x:dog>

      <x:cat>Garfield</x:cat>

      </x:row>

      <x:row>

      <x:dog color="white">Snoopy</x:dog>

      <x:cat>Heathcliff</x:cat>

      </x:row>

      <x:row>

      <x:dog color="gray">Spike</x:dog>

      <x:cat>Sylvester</x:cat>

      </x:row>

      </x:root>

      這個XML文檔包含了一些元素(element)和屬性(attribute),還有一個名域空間(namespace)的聲明,都是一些基本的XML。在示例的PHP代碼中,我們會從這個XML文檔中得到多種的查詢結(jié)果。

      <?php

      $sxml = ‘<?xml version="1.0"?>

          <x:rootxmlns:x="http://www.">

              <x:row>

                  <x:dog color="yellow">Marmaduke</x:dog>

                  <x:cat>Garfield</x:cat>

              </x:row>

              <x:row>

                  <x:dog color="white">Snoopy</x:dog>

                  <x:cat>Heathcliff</x:cat>

              </x:row>

              <x:row>

                  <x:dog color="gray">Spike</x:dog>

                  <x:cat>Sylvester</x:cat>

              </x:row>

          </x:root>‘;

      $xml = domxml_open_mem($sxml);

      $xpc = XPath_new_context($xml);

      XPath_register_ns($xpc, "x", "http://www.");

      $nodes = XPath_eval($xpc, "http://x:row/x:dog[@color=‘yellow‘]/text()");

      foreach ($nodes->nodeset as $node) {

          print $node->content . "\n";

      }

      $nodes = XPath_eval($xpc, "http://x:row/x:dog");

      foreach ($nodes->nodeset as $node) {

          print $xml->dump_node($node) . "\n";

      }

      $nodes = XPath_eval($xpc, "http://x:cat/child::text()|//x:dog[@color=‘white‘ or

      @color=‘gray‘]/text()");

      foreach ($nodes->nodeset as $node) {

          print $node->content . "\n";

      }

      $xml->free();

      ?>

      首先,創(chuàng)建一個局部變量來存儲XML字符串,這一信息原本可以被傳遞并成為HTTP POST請求的一部分,然而,我要把它包含在代碼中;下一步是要使用domxml_open_mem()來創(chuàng)建一個DOM文檔,domxml_open_mem()可以從有效的XML字符串中在內(nèi)存中創(chuàng)建一個DOM文檔對象,它只有一個參數(shù):XML字符串;另一種方法是將XML存儲于一個單獨的文件中,然后使用domxml_open_file()從文件中讀取XML,它也只有一個參數(shù):XML文件的文件名。

      創(chuàng)建了DOM文檔對象之后,就可以通過XPath_new_context()來創(chuàng)建這一對象的XPath環(huán)境了,它只需一個參數(shù):當(dāng)前的DOM文檔對象。這一環(huán)境用于XPath表達式的運算,如果需要的話還可以用于注冊名域空間。既然在XML中已經(jīng)包括了一個名域空間,則使用XPath_register_ns()來注冊名域空間,這樣才能在XPath查詢中使用前綴,XPath_register_ns()包括了三個參數(shù):他們分別是XPath環(huán)境、前綴和名域空間。

      現(xiàn)在可以運行XPath查詢了,可以通過XPath_eval()來實現(xiàn),它的第一參數(shù)是XPath的環(huán)境,第二參數(shù)是XPath表達式,XPath_eval()將返回一個DOM節(jié)點的數(shù)組,在我的代碼中,我對節(jié)點集合進行單步調(diào)試,可以得到某些形式的輸出。

      在第一個XPath例子中,我抓取了所有‘color’屬性等于‘yellow’,并且在x:row節(jié)點下的x:dog文本元素,在PHP中的XPath表達式和MSXML中的XPath有些細(xì)微的區(qū)別,我將‘/text()’部分包含在表達式中則只返回文本節(jié)點,而在MSXML中,你需要使用‘text’屬性來訪問文本節(jié)點,對返回的文本節(jié)點使用‘content’屬性則可以取得文本節(jié)點的內(nèi)容。

      在第二個例子中,我抓取了在x:row節(jié)點下的x:dog元素,然而,這次我對DOM文檔對象使用dump_node()方法來打印出具有適當(dāng)節(jié)點的整個XML,dump_node()接受一個參數(shù):需要轉(zhuǎn)儲內(nèi)容的DOM節(jié)點。

      在最后一個例子中,我抓取了所有‘color’屬性等于’gray’的所有x:cat文本節(jié)點和x:dog文本節(jié)點,我再次對節(jié)點集合進行單步調(diào)試并打印出每個節(jié)點的內(nèi)容,最后釋放這個DOM文檔對象。

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多