2011-01-31 36 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种元素和三个(空格只)文本节点,周围的元素。