程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> php中的XML DOM(10),xmldom

php中的XML DOM(10),xmldom

編輯:關於PHP編程

php中的XML DOM(10),xmldom


1.PHP DOM (1)

Php中的DOM跟javascript不一樣,屬性不用另外增加一個節點

2.主要類

     DOMDocument :文檔類

     DOMNodeList :節點列表類

     DOMNode :節點類

     DOMElement :元素類

3. DOMDocument

  3.1創建文檔對象

     DOMDocument::__construct ([ string $version [, string $encoding ]] )

     [ string $version :版本號

     [, string $encoding ]]:字符集

  3.2、加載xml文件

     mixed DOMDocument::load ( string $filename)

     string $filename:要加載的xml文件名稱

  3.3、獲取節點

     DOMNodeList DOMDocument::getElementsByTagName ( string name )

     String name:要獲取的節點名

示例:Demo.php

<?php
    header ( 'Content-Type:text/html;charset=gb2312' );
// 利用php解析demo01.xml
// 實例化dom對象
    $dom = new DOMDocument ();
// 加載xml文件
    $dom->load ( 'demo01.xml' );
// 通過dom對象獲取person節點,注意:這裡返回值是一個DOMNodeList類對象
    $persons = $dom->getElementsByTagName ( 'person' );
// 共有幾個person
    echo '共有' . $persons->length . '個人<br>';      //輸出共有兩個人
// 選中索引為0的person,也就是第一個人
    $person = $persons->item ( 0 );
// 在這個person下獲取name節點,返回的仍然是一個DOMNodeList類對象
    $names = $person->getElementsByTagName ( 'name' );    
// 輸出姓名
echo $names->item ( 0 )->nodeValue . '<br>';       //輸出'張三'
為什麼要進行兩次取的Nodelist呢?請參照上圖,因為有兩個節點

demo.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="s101">
        <name>zhangsan</name>
        <age>30</age>
    </person>
    <person>
        <name>wangwu</name>
        <age>18</age>
    </person>
</persons>

4. DOMNodeList類 (上面的person就是NodeList節點)

  1、Length

     當前節點列表中共有幾個節點

  2、DOMElement DOMNodelist::item ( int $index )

     選中索引為index的節點

     int $index:索引

5、 DOMNode類

     1、nodeValue 節點的值

6、 關於屬性的讀取

   1、bool DOMElement::hasAttribute ( string $name )

      判斷是否具有某個屬性(只判斷某個屬性下有沒有)

      String $name:屬性名

   2、bool DOMNode::hasAttributes ( void )

      判斷是否具有屬性(只要有屬性就返回true)

   3、string DOMElement::getAttribute ( string $name )

      獲取指定屬性的屬性值

String $name:屬性名

示例2.用連貫操作輸出

<?php
    $dom = new DOMDocument ( '1.0', 'utf-8' );
    $dom->load ( 'demo01.xml' );
// 想得到第一個人的姓名
    echo $dom->getElementsByTagName ( 'person' )->item ( 0 )
    ->getElementsByTagName ( 'name' )->item ( 0 )->nodeValue;
輸出:張三

Example3

<?php
    header ( 'Content-Type:text/html;charset=gb2312' );
    $dom = new DOMDocument ( '1.0', 'utf-8' );
    $dom->load ( 'demo01.xml' );
    $person = $dom->getElementsByTagName ( 'person' )->item ( 0 );
// 判斷節點是否具有id屬性
    if ($person->hasAttribute ( 'id' )) {
        echo '具有id屬性';
    } else {
        echo '沒有id屬性';
    }
    echo '<br>';
// 判斷節點是否具有屬性
    if ($person->hasAttributes ()) {
        echo '有屬性';
    } else {
        echo '沒有任何屬性';
    }
    echo '<br>';
// 得到第一個person的id屬性值
    echo $person->getAttribute ( 'id' );

之前的例子只能得到一條數據,現在我想得到所有人的完整信息,該如何實現?

示例4:

<?php header ( 'content-type:text/html;charset=gb2312' ); $dom = new DOMDocument ( '1.0', 'utf-8' ); $dom->load ( 'demo01.xml' ); // 得到所有person節點 $persons = $dom->getElementsByTagName ( 'person' ); // 得到總人數 $count = $persons->length; for($i = 0; $i < $count; $i ++) { // $person表示第i個人 $person = $persons->item ( $i ); echo '第' . ($i + 1) . '個人的'; if ($person->hasAttribute ( 'id' )) { echo '學號:' . $person->getAttribute ( 'id' ); } echo '姓名:' . $person->getElementsByTagName ( 'name' )->item ( 0 )->nodeValue; echo '年齡:' . $person->getElementsByTagName ( 'age' )->item ( 0 )->nodeValue; echo '<br>'; } ?>

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved