1
我已經創建了一個類,它讀取值的值和節點名稱,並將其組合到數組中,以將其用作對XML中配置的簡單快速訪問。但是這個解決方案只適用於底層節點,XML看起來像這樣。使用DOMDocument獲取XML中的最後一個節點PhP
<?xml version="1.0" encoding="ISO-8859-2"?>
<settings>
<const>
<inscript>true</inscript>
<title>Template</title>
</const>
<meta>
</meta>
<db>
<user>user</user>
<pass>pass</pass>
<host>host</host>
<name>name</name>
</db>
<path>
<style>
<css>/Template/view/www/style/</css>
<img>/Template/view/www/style/img</img>
</style>
</path>
</settings>
現在我想例如整個數據庫節點,並返回它作爲一個數組,其中節點名稱沃爾德的關鍵節點和價值,價值。但我堅持這一點。繼承人到目前爲止我做了什麼。
class config {
private static $xml = "lib/config/settings.xml";
private static $xmlRoot = "settings";
public static function loadConfig($value) {
$domDocument = new DOMDocument();
$domDocument->load(self::$xml);
$settings = $domDocument->getElementsByTagName(self::$xmlRoot);
try {
foreach ($settings as $setting) {
$configValue = $setting->getElementsByTagName($value)->item(0)->nodeValue;
$configNode = $setting->getElementsByTagName($value)->item(0)->nodeName;
$test = $setting->getElementsByTagName("path")->item(0)->childNodes->item(2)->nodeName;
var_dump($test);
}
$configValue = explode(' ', trim(preg_replace('/\s+/', ' ', $configValue)));
$configNode = explode(' ', trim(preg_replace('/\s+/', ' ', $configNode)));
$configArray = array_combine($configNode, $configValue);
return $configArray;
}
catch(Exception $e) {
echo '<h1>Błąd - '.$e->getMessage().'</h1>';
}
}
}
雖然在大多數情況下,我更喜歡'DOM'延伸,似乎[simplexml的(HTTP:// WWW。 php.net/manual/en/book.simplexml.php)更適合這個目的。你不需要自己將節點數據解析到數組中。看看手冊和示例... – hek2mgl 2013-05-04 09:01:31
你爲什麼要在根元素上做一個'foreach'?只有一個根元素。 – 2013-05-04 09:01:40
我想嘗試DOMDocument的PHP,只是爲了瞭解它。而且,我認爲foreach在根中的所有節點上迭代。 – 2013-05-04 09:05:09