2011-01-31 67 views
0

有了這個XML:PHP - 大教堂Xpath的問題

<?xml version="1.0" encoding="UTF-8" ?> 
<databases> 
    <default> 
     <type>mysql</type> 
     <host>localhost</host> 
     <table-prefix></table-prefix> 
     <username>root</username> 
     <password></password> 
     <charset>UTF-8</charset> 
    </default> 
    <test> 
     <type>mysql</type> 
     <host>localhost</host> 
     <table-prefix></table-prefix> 
     <username>root</username> 
     <password></password> 
     <charset>UTF-8</charset> 
    </test> 
</databases> 

代碼:

public function get($xpath = '/') 
    { 
     $dom_object = new DOMDocument(); 
     $dom_object->load($this->_filename); 
     $domxpath_object = new DOMXpath($dom_object); 

     $domnodelist_object = $domxpath_object->query($xpath); 

     return $this->XMLConfigurationToArray($domnodelist_object); 
    } 

private function XMLConfigurationToArray(DOMNodeList $domnodelist_object) 
    { 
     $configuration_array = array(); 

     foreach ($domnodelist_object as $element) 
     { 
      if ($element->hasChildNodes()) 
      { 
       foreach ($element->childNodes as $c) 
       { 
        print_r('<pre>' . $element->tagName . '</pre>'); 
       } 
      } 
     } 

     return $configuration_array; 
    } 

爲什麼它打印出數據庫的5倍?我打電話get('/ databases')... 謝謝。

+0

您期待兩次看到「數據庫」? – 2011-01-31 19:27:40

+0

數據庫只是一次...是不是錯誤? – thomas 2011-01-31 19:33:47

回答

1

還有空格,這是太的childNodes(textNodes)

忽略textNodes:

if($c->nodeType===1) 
{ 
    echo('<pre>' . $c->tagName . '</pre>'); 
} 

...或者也可以使用XPATH檢索子(元素)-nodes。

您也可以忽略從一開始的空白字符(由戈登鏈接的主題中描述):

$dom_object = new DOMDocument(); 
$dom_object->preserveWhiteSpace=false; 
1

爲什麼它打印出數據庫的5倍?我 調用get(「/數據庫」)

由於databases頂級元素有5個孩子節點:2種元素和三個(空格只)文本節點,周圍的元素。