首頁  >  文章  >  後端開發  >  php DOM 解析

php DOM 解析

WBOY
WBOY原創
2016-08-08 09:31:041922瀏覽

DOM    Document Object Model

  • DOMAttr — 元素屬性類
  • DOMCdataSection — The DOMCdataSection class
  • DOMCharacterData — 字符資料類umentFragment — The DOMDocumentFragment class
  • DOMDocumentType — The DOMDocumentType class
  • DOMElement — The DOMElement class
  • DOMEntity — The DOMEntity class
  • DOMEntityReference — The DOMEntityReference class
  • DOMNamedNodeMap — The DOMNamedNodeMap class
  • DOMNode — The DOMNode class
  • DOMNodeList — The DOMNodeList 類
  • DOMNotation — The DOMNotation class
  • DOMProcessingInstruction — The DOMProcessingInstruction class                         
  • DOMElement
  • dom_import_simplexml
  • (
  • SimpleXMLElement
  • $node
  • ) —
  • 從 SimpleXMLElement物件中取得DOM元素

  •     預先定義常數
        下列常數由此擴充定義,且僅在此擴充功能編譯入 PHP 或在執行時動態載入時可用。
        XML 常數常數    值    描述
        XML_ELEMENT_NODE(整數)     1     ttr
        XML_TEXT_NODE(整數)    3     節點為DOMText
        XML_CDATA_SECTION_NODE(整數)    4    XML_CDATA_SECTION_NODE(整數)    4   ) )     5     節點為DOMEntityReference
        XML_ENTITY_NODE(整數)     6     節點  
        XML_COMMENT_NODE(整數)     8    節點是DOMComment
        XML_DOCUMENT_NODE (整數)    9    XML_DOCUMENT_NODE (整數)    9   整數) )     10     節點是 )     10     節點為DOMDocumentType
        XML_DOCUMENT_FRAG_NODE(整數)     11      節點是一個DOMNotation
        XML_HTML_DOCUMENT_ NODE(整數)     13     
        XML_DTD_NODE(整數)   
        XML     15     
        XML_ATTRIBUTE_DECL_NODE(整數)     16
        XML_ENTITY_DECL_NODE(整數)     17     
        XML 整數)     1     
        XML_ATTRIBUTE_ID(整數) ger)     2     
        XML_ATTRIBUTE_IDRERE(整數) REFS(整數)     4     
        XML_ATTRIBUTE_ENTITY(整數)     5     
        XML_AT TRIBUTE_NMTOKEN (整數)     7     
        XML_ATTRIBUTE_NMTOKENS (整數)     8     
       ATTRIBUTE_NOTATION (整數)     10     
        DOMException 常數常數    值    說明
      用於 PHP 錯誤。
        DOM_INDEX_SIZE_ERR (整數)     1     若索引或大小為負數,或大於允許的值。
        DOMSTRING_SIZE_ERR (整數)     2     若指定的文字範圍不適用於 DOMString。
        DOM_HIERARCHY_REQUEST_ERR (整數)     3如果任何節點被插入到不屬於它的位置
        DOM_WRONG_DOCUMENT_ERR (整數) 系統
        DOM_INVALID_CHARACTER_ERR (整數)     5     如果指定了無效或不合法的字符,例如名稱中。
        DOM_NO_DATA_ALLOWED_ERR (整數)     6     如果使用未支援資料的節點指定了資料。
        DOM_NO_MODIFICATION_ALLOWED_ERR (整數)     7     如果嘗試修改不允許修改的物件。
        DOM_NOT_FOUND_ ERR(整數)     8如果嘗試在沒有的上下文中引用節點。
        DOM_NOT_SUPPORTED_ERR(整數)    9     如果已實現不支援請求的物件或作業類型。
        DOM_INUSE_ATTRIBUTE_ERR(整數)    10     若嘗試新增已在其他地方使用的屬性。
        DOM_INVALID_STATE_ERR (整數)     11     若嘗試使用不可用或已使用的物件。
        DOM_SYNTAX_ERR (整數)     12     如果指定了無效或非法的字串。
        DOM_INVALID_MODIFICATION_ERR (整數)     13     若嘗試修改底層物件的型別。
        DOM_NAMESPACE_ERR(整數)    14     若嘗試以與命名空間相關的不正確的方式建立或變更物件。
        DOM_INVALID_ACCESS_ERR(整數)    15     如果參數或操作底層物件不支援。
        DOM_VALIDATION_ERR (integer)     16     如果調用insertBefore 或removeChild 等方法會使Node 在「部分有效性」方面無效,則會引發   /* 屬性*/
        公用唯讀字串$nodeName ;              //傳回目前節點型態最精確的名稱
           ,取決於其型別
        public readonly int $nodeType ;                 //取得節點的型別。預先定義的 XML_xxx_NODE 常數之一    public readonly DOMNode $parentNode ;           //節點的父節點   若沒有子點,
                                        // 這是一個空的 DOMNodeList。
        public readonly DOMNode $firstChild ;           //此節點的第一子節點。如果沒有這樣的節點,則傳回 NULL。
        public readonly DOMNode $lastChild ;            //此節點的最後子節點。如果沒有這樣的節點,則傳回 NULL。
        public readonly DOMNode $previousSibling ;      //緊接在該節點之前的節點。如果沒有這樣的節點,則傳回 NULL。
        public readonly DOMNode $nextSibling ;          //則已緊接著該節點的節點。如果沒有這樣的節點,則傳回 NULL。
        public readonly DOMNamedNodeMap $attributes ;   //包含此節點屬性的 DOMNamedNodeMap(如果它是 DOMElement)
                                        //否則為 NULL。
        公共唯讀 DOMDocument $ownerDocument ;    //與此節點關聯的 DOMDocument 物件。
        public readonly string $namespaceURI ;          //此節點的命名空間URI,若未指定則為NULL。
        public string $prefix ;                       
        public readonly string $localName ;             //則已傳回該節點限定名的本地部分。
        public readonly string $baseURI ;               //此節點的絕對基本 URI,若實作無法實現,則為 NULL
                                        絕對URI。
        public readonly string $textContent ;           //此屬性傳回該節點及其後代的文字內容物。
        
        /* 方法*/
        public DOMNodeappendChild ( DOMNode $newnode )     , array $ns_prefixes ]]] ] )   將節點規範化為字串
        public int C14NFile ( string $uri [, bool $exclusive [, bool $with_comments [, array $xpath [, array $ns_prefixes ]]]] ) OM 將([ bool $deep=False ] )       複製節點
        public int getLineNo ( void )                取得一個節點的XPath
        public bool hasAttributes ( void )          檢查節點是否具備屬性
        public bool hasChildNodes ( void )           檢查節點是否有子節點
        public DOMNode insertBefore ( DOMNode $newnode [, DOM string $namespaceURI )              以檢查指定的命名空間URI是否為預設命名空間
        public bool isSameNode ( DOMNode $node )                              檢視指定版本是否支援此功能
        public stringlookupNamespaceURI ( string $prefix )                 根據前綴獲取節點的命名空間URI
        public string LookupPrefix ( string $namespaceURI )                  根據命名空間URI 獲取節點的命名空間前綴
        public void normalize ( void )                                      規範化節點
        public DOMNode removeChild ( DOMNode $oldnode )                      從子節點列表中刪除子節點
        public DOMNode ReplaceChild ( DOMNode $newnode , DOMNode $oldnode )     替換子節點
    }
    DOMNamedNodeMap 實作Tan     地圖中的節點數。有效子節點索引的範圍是 0 到 length - 1(含)。
        /* 方法*/
        DOMNode getNamedItem ( string $name )       檢索名稱指定的節點
        DOMNode getNamedItemNS ( string $named
        DOMNode item ( int $index )     檢索索引指定的節點
    }
    DOMNotation extends DOMNode {
        /* 屬性*/
        readonly public string $publicId ;
        readonly public string $system
    DOMProcessingInstruction extends DOMNode {
            /* 屬性*/
            readonly public string 方法*/
            public __construct ( string $name [, string $value ] )
     }
    DOMAttr 表示DOMElement物件屬性.
    DOMAttr extends DOMNode {
        /* 屬性*/
        public readonly string $name ;      // public readonly bool $schemaTypeInfo ;          //目前未來實作為NULL
        public readonly bool $specified ;               //目前未來實作為NULL
             //屬性值
        /* 方法*/
        public __construct ( string $name [, string $value ] )
        public bool isId ( void )
        
    }
    DOMNodeList implements Traversable {
        /* 屬性*/
        readonly public int $length ; th - 1 inclusive.
        / * 方法*/
        DOMNode DOMNodelist::item ( int $index )        Retrieves a node specified by index
    }
    DOMXPath { /* 方法*/
        public __construct ( DOMDocument $ doc )
        public mixed evaluate ( string $expression [, DOMNode $contextnode [, bool $registerNodeNS = true ]] )      E值ion [, DOMNode $contextnode [, bool $registerNodeNS = true ]] )       Evaluates the given XPath expression
        public bool registerNamespace ( string $prefix , string $namespaceURI ) PhpFunctions ([ mixed $restrict ] )     Register PHP functions as XPath functions
    }
     
    DOMElement 擴充 DOMNode {
        /* 屬性*/
        readonly public bool $schemaTypeInfo ;     元素名稱
        /* 方法*/    
        public __construct ( string $name [, string $value [, string $namespaceURI ]] )  建立新的DOMElement 物件   
        public string getAttribute ( string $name )            
        public DOMAttr getAttributeNodeNS ( string $namespaceURI , string $localName )
        public string 。 Attribute ( string $name )
        public bool hasAttributeNS ( string $ namespaceURI , string $localName )
        public bool removeAttribute ( string $name )
        public bool removeAttributeNode ( DOMAttr$oldnode )
        public bool removeAttributeNode ( DOMAttr $oldnode )

        public DOMAttr setAttribute ( string $name , string $value )
        public D。    public void setIdAttribute ( string $name , bool $isId )
        public void setIdAttributeNode ( DOMAttr $attr , bool $isId )
        public void setIdAttributeNS ( string $namespaceURI , string $localName , bool $isࠎ沒有節點直接對應於該類,但其他節點繼承自該類。
    DOM?
        readonly public int $length ;       內容的長度。
        /* 方法*/
        void appendData ( string $data )        將字串追加到節點的字元資料末端
          void insertData ( int $offset , string $data )      在指定的16 位元單位偏移處插入字串
        void ReplaceData ( int $offset , int $count , string $data )     $count )       從節點擷取一定範圍的資料
    }
    DOMText         DOMText 類別繼承自DOMCharacterData,表示DOMElement 或DOMAttr 的文字內容。
    DOMText 擴充 DOMCharacterData {
        /* 屬性 * /
        唯讀公有字串 $wholeText ;     儲存邏輯上相鄰的(不使用元素、註解或處理指令分隔)文字節點的所有文字。
        
        /* 方法*/
        public __construct ([ string $value ] )     建立一個新的文字  
        public DOMText splitText ( int $offset )        將此節點按指定偏移分成兩個節點
    }
    DOMCdataSection     DOMCdataSection 繼承自DOMText,用於CData 建構的文字表示。
    DOMCdataSection 擴充 DOMText {
        / * 方法 */
        public __construct ( string $value )
    }
    DOMComment  表示註解節點,字元以 分隔。
    DOMComment extends DOMCharacterData {
        /* method */
        public __construct ([ string $value ] )
    }
    DOMDocument類型
    DOMDocumentType extends DOMNode {
        /* 屬性 */
        readonly public string $publicId ;      外部子集的公共識別碼。
        readonly public string $systemId ;      外部子集的系統識別碼。這可能是絕對 URI,也可能不是。
        readonly public string $name ;          DTD 的名稱;即緊接在 DOCTYPE 關鍵字後面的名稱。
        readonly public DOMNamedNodeMap $entities ;     包含 DTD 中宣告的一般實體(外部和內部)的 DOMNamedNodeMap。
        readonly public DOMNamedNodeMap $notations ;        包含 DTD 中宣告的符號的 DOMNamedNodeMap。
        只讀公有字串 $internalSubset ;        內部子集為字串,若沒有則為 null。它不包含分隔方括號。
    }
    DOMDocumentFragment 擴充 DOMNode {
        public bool appendXML ( string $data )      附加原始 XML 資料
    }
    DOMEntity     附加原始 XML 資料
    }
    DOMEntity 
    DOMEntity 擴充 DOMNode {
        /* 屬性 */
        唯讀公有字串 $publicId ;      實體相關的公用識別碼(若指定),否則為 NULL。
        readonly public string $systemId ;      若指定,則實體關聯的系統識別符,否則為 NULL。這可能是絕對 URI,也可能不是。
        只讀公有字串 $notationName ;      未解析的實體,實體的表示法名稱。對於已解析的實體,這是 NULL。
        public string $actualEncoding ;         當該實體是外部已解析實體時,並指定在解析時用於該實體的編碼的屬性。如果它是來自內部子集的實體或未知,則為 NULL。
        readonly public string $encoding ;      當實體是外部解析實體時,並作為文字宣告的一部分指定該實體的編碼的屬性。否則為 NULL。
        readonly public string $version ;       當實體為外部解析實體時,並指定為實體的版本編號作為文字宣告的屬性。否則為 NULL。
    }
    DOMEntityReference 擴充 DOMNode {🎜    public __construct ( string $name )🎜}
    Exception {
        /* 屬性*/
        protected string $message ;     例外訊息內容
        protectedint $      拋出例外的檔案名稱
        protected int $line ;           以該文件中的行號
        /* 方法*/
        public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
        final public string getMessage ( void )         獲取異常消息內容
        final public Exception getPrevious ( void )     返回異常鏈中的前一個異常
        final public int getCode ( void )  ( void )            取得異常發生的程式檔案名稱
        final public int getLine ( void )               有異常的程式碼在檔案中的行號
        final public array getTrace ( void         取得字串型態的異常追蹤資訊
        public string __toString ( void )               將例外物件轉換為字串
        final private void __clone ( void )             異常克隆
    }
    DOMException  for logical reasons.
    DOMException extends Exception {
        /* 屬性*/
        readonly public int $code ;     An integer indicating the type of error generated
    }
    DOMImplementation    The DOMImplementation interfacem) a number of method per performing for performat) ect model.
    DOMImplementation {
        /* 方法*/
        __construct ( void )
        public DOMDocument createDocument ([ string $namespaceURI = NULL [, string $qualified錯誤document element
        public DOMDocumentType createDocumentType ([ string $qualifiedName = NULL [, string $publicId = NULL [, string $systemId = NULL ]]] )          )        Test if the DOM implementation implements a specific feature
    }
    DOMDocument 擴充 DOMNode {
        /* 屬性 */
        只讀公用字串 $actualEncoding ;       則已棄用。文件的實際編碼,是相當於編碼的唯讀。
        readonly public DOMConfiguration $config ;      已棄用。呼叫 DOMDocument::normalizeDocument() 時所使用的配置。
        readonly public DOMDocumentType $doctype ;      與此文件關聯的文件類型聲明。
        readonly public DOMElement $documentElement ;       這是一個方便的屬性,允許直接存取作為文件的文檔元素的子節點。
        public string $documentURI ;                文檔的位置,而未定義則為 NULL。
        public string $encoding ;       文件的編碼,並以 XML 聲明指定。此屬性並未出現在最終的 DOM Level 3 規格中,但卻是唯一在此實作中操作 XML 文件編碼的方法。
        public bool $formatOutput ;     透過縮排和額外空格來充分格式化輸出。
        readonly public DOMImplementation $implementation ;         處理此文件的 DOMImplementation 物件。
        public bool $preserveWhiteSpace = true ;        請勿刪除多餘的空白。預設為 TRUE。
        public bool $recover ;                  所有權。啟用復原模式,即嘗試解析格式不正確的文件。該屬性不是 DOM 規範的一部分,而是特定於 libxml 的。
        public bool $resolveExternals ;     將其設為 TRUE 以從文件類型宣告載入外部實體。這對於在 XML 文件中包含字元實體非常有用。
        public bool $standalone ;           已被使用。文件是否獨立(由 XML 宣告指定)對應於 xmlStandalone.
        public bool $strictErrorChecking = true ;       錯誤時拋出 DOMException。預設為 TRUE。
        public bool $substituteEntities ;           擁有。是否替換實體。該屬性不是 DOM 規範的一部分,而是特定於 libxml 的。
        public bool $validateOnParse = false ;      載入並依 DTD 驗證。預設為 FALSE。
        公有字串 $version ;               則已被使用。 XML 的版本,對應 xmlVersion.
        readonly public string $xmlEncoding ;       作為 XML 宣告的一部分,並指定此文件的編碼的屬性。當未指定或未知時(例如當 Document 在記憶體中建立時),此值為 NULL。
        public bool $xmlStandalone ;        為 XML 宣告的一部分,指定此文件是否獨立的屬性。未指定時為 FALSE。
        public string $xmlVersion ;     作為 XML 宣告的一部分,並指定此文件的版本號碼的屬性。如果沒有聲明,且本文檔支援「XML」功能,則值為「1.0」。
        
        /* 方法*/
        public __construct ([ string $version [, string $encoding ]] )
    我  string $namespaceURI , string $qualifiedName )       建立具有關聯命名空間的新屬性節點
        public DOMCDATASection createCDATASection ( string $data )
        public DOMComment createComment ( string $data )
    . ing $name [, string $value ] )
        public DOMElement createElementNS ( string $namespaceURI , string $qualifiedName [, string $value ] )
    public DOMEntityReference createEntityReference ( string $name )
        public DOMProcessingInstruction createProcessingInstruction ( string $target [, string $data ] )
     elementId )      搜尋具有特定id 的元素
    public DOMNodeList getElementsByTagName ( string $name )        搜尋所有給定本地標籤名稱的所有元素
        public DOMNodeList getElementsByTagNameNS  OMNode importNode ( DOMNode $ importedNode [ , bool $deep ] )     將節點匯入目前文件
        public mix load ( string $filename [, int $options = 0 ] )    $options = 0 ] )從字串載入HTML
        public bool loadHTMLFile ( string $filename [, int $options = 0 ] )     從檔案中載入HTML
        public mix loadXML (string $. XML
    public void normalizeDocument ( void )                         的擴充類別
        public boolrelaxNGValidate ( string $filename )                    執行string $source )             地([ DOMNode $node = NULL ] )      轉儲使用HTML格式將內部文件轉儲至字串中
        public int saveHTMLFile ( string $filename )            使用HTML 格式將內部文件轉儲至檔案中
    ) $ 將內部XML樹轉儲回來轉換為字串
        public bool schemaValidate ( string $filename [, int $flags ] )     基於schema 驗證文件
        public   public bool validate ( void )               地

    <?php
    $url = &#39;http://movie.douban.com/category/&#39; ;
    function getPage($url)
    { 
      $curl = curl_init(); 
      $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; 
      $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; 
      $header[] = "Cache-Control: max-age=0"; 
      $header[] = "Connection: keep-alive"; 
      $header[] = "Keep-Alive: 300"; 
      $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
      $header[] = "Accept-Language: en-us,en;q=0.5"; 
      $header[] = "Pragma: "; // browsers keep this blank. 
    
      curl_setopt($curl, CURLOPT_URL, $url); 
      curl_setopt($curl, CURLOPT_USERAGENT, &#39;Googlebot/2.1 (+http://www.google.com/bot.html)&#39;); 
      curl_setopt($curl, CURLOPT_HTTPHEADER, $header); 
      curl_setopt($curl, CURLOPT_REFERER, &#39;http://www.baidu.com&#39;); 
      curl_setopt($curl, CURLOPT_ENCODING, &#39;gzip,deflate&#39;); 
      curl_setopt($curl, CURLOPT_AUTOREFERER, true); 
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); 
      curl_setopt($curl, CURLOPT_TIMEOUT, 10); 
    
      $html = curl_exec($curl);  
      curl_close($curl); 
      return $html;
    } 
    
    $text = getPage($url); 
    $xml = new DOMDocument();
    $xml->loadHTMLFile("test.html");
    $xml->encoding='UTF-8';
    $xpath=new DOMXpath($xml);
    
    $elements = $xpath->query("/html/body//div[@id='type']/ul");
    var_dump($elements);
    foreach ( $elements as $e){
        foreach ($e->childNodes as $es){
            var_dump($es->nodeValue);
        }
    }
    ?>



    以上就介紹了php DOM解析,包含了面向的內容,希望對PHP教學有興趣的朋友有幫助。


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn