怎麼用php解析xml檔案

來源:互聯網
上載者:User

DOMElement

DOMElement DOMDocument::createElement ( string $name [, string $value ] )

建立節點元素
String $name:節點名
String $value:節點的值
8、 添加節點
•DOMNode DOMNode::appendChild ( DOMNode $newnode )
添加子節點
   DOMNode $newnode:新節點
在dom操作中,增刪改操作必須依賴於父節點
9、 儲存
•string DOMDocument::saveXML
儲存至某個字串中
•int DOMDocument::save ( string $filename )
儲存至某個檔案中
String $filename:檔案名稱
10、 刪除節點
•DOMNode DOMNode::removeChild ( DOMNode $oldnode )
刪除節點
DOMNode $oldnode:要刪除的節點
11、 更新節點

•DOMNode DOMNode::replaceChild ( DOMNode $newnode , DOMNode $oldnode )
DOMNode $newnode:新節點
DOMNode $oldnode:原節點

12、 添加屬性
•DOMAttr DOMElement::setAttribute( string $name , string $value )
string $name :屬性名稱
string $value :屬性值
13、 修改屬性
      DOMAttr DOMElement::setAttribute( string $name , string $value )
string $name :屬性名稱
string $value :屬性值
14、 刪除屬性
•bool DOMElement::removeAttribute ( string $name )
string $name:要刪除的屬性名稱
15、 擷取屬性
•string DOMElement::getAttribute ( string $name )
string $name:要擷取的屬性值的屬性名稱

DOMDocument還是PHP5後推出的DOM擴充的一部分,可用來建立或解析html/xml,目前只支援utf-8編碼。

 代碼如下 複製代碼

$xmlstring = <<<XML
<?xml version='1.0'?>
<document>
  <cmd attr='default'>login</cmd>
  <login>imdonkey</login>
</document>
XML;

$dom = new DOMDocument();
$dom->loadXML($xmlstring);
print_r(getArray($dom->documentElement));

function getArray($node) {
  $array = false;

  if ($node->hasAttributes()) {
    foreach ($node->attributes as $attr) {
      $array[$attr->nodeName] = $attr->nodeValue;
    }
  }

  if ($node->hasChildNodes()) {
    if ($node->childNodes->length == 1) {
      $array[$node->firstChild->nodeName] = getArray($node->firstChild);
    } else {
      foreach ($node->childNodes as $childNode) {
      if ($childNode->nodeType != XML_TEXT_NODE) {
        $array[$childNode->nodeName][] = getArray($childNode);
      }
    }
  }
  } else {
    return $node->nodeValue;
  }
  return $array;
}

 SimpleXML

SimpleXML是PHP5後提供的一套簡單易用的xml工具集,可以把xml轉換成方便處理的對象,也可以組織產生xml資料。不過它不適用於包含namespace的xml,而且要保證xml格式完整(well-formed)。它提供了三個方法:simplexml_import_dom、simplexml_load_file、simplexml_load_string,函數名很直觀地說明了函數的作用。三個函數都返回SimpleXMLElement對象,資料的讀取/添加都是通過SimpleXMLElement操作

 代碼如下 複製代碼


$string = <<<XML
<?xml version='1.0'?>
<document>
  <cmd>login</cmd>
  <login>imdonkey</login>
</document>
XML;

$xml = simplexml_load_string($string);
print_r($xml);
$login = $xml->login;//這裡返回的依然是個SimpleXMLElement對象
print_r($login);
$login = (string) $xml->login;//在做資料比較時,注意要先強制轉換
print_r($login);

SimpleXML的優點是開發簡單,缺點是它會將整個xml載入記憶體後再進行處理,所以在解析超多內容的xml文檔時可能會力不從心。如果是讀取小檔案,而且xml中也不包含namespace,那SimpleXML是很好的選擇。


XMLReader

XMLReader也是PHP5之後的擴充(5.1後預設安裝),它就像遊標一樣在文檔流中移動,並在每個節點處停下來,操作起來很靈活。它提供了對輸入的快速和非緩衝的流式訪問,可以讀取流或文檔,使使用者從中提取資料,並跳過對應用程式沒有意義的記錄。
以一個利用google天氣api擷取資訊的例子展示下XMLReader的使用,這裡也只涉及到一小部分函數,更多還請參考官方文檔。

 代碼如下 複製代碼

$xml_uri = 'http://www.google.com/ig/api?weather=Beijing&hl=zh-cn';
$current = array();
$forecast = array();

$reader = new XMLReader();
$reader->open($xml_uri, 'gbk');
while ($reader->read()) {
  //get current data
  if ($reader->name == "current_conditions" && $reader->nodeType == XMLReader::ELEMENT) {
    while($reader->read() && $reader->name != "current_conditions") {
      $name = $reader->name;
      $value = $reader->getAttribute('data');
      $current[$name] = $value;
    }
  }

  //get forecast data
  if ($reader->name == "forecast_conditions" && $reader->nodeType == XMLReader::ELEMENT) {
    $sub_forecast = array();
    while($reader->read() && $reader->name != "forecast_conditions") {
      $name = $reader->name;
      $value = $reader->getAttribute('data');
      $sub_forecast[$name] = $value;
    }
    $forecast[] = $sub_forecast;
  }
}
$reader->close();

XMLReader和XML Parser類似,都是邊讀邊操作,較大的差異在於SAX模型是一個“推送”模型,其中分析器將事件推到應用程式,在每次讀取新節點時通知應用程式,而使用XmlReader的應用程式可以隨意從讀取器提取節點,可控性更好。
由於XMLReader基於libxml,所以有些函數要參考文檔看看是否適用於你的libxml版本。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.