簡體   English   中英

使用DOMDocument PhP獲取XML中的最后一個節點

[英]Get last node in XML using DOMDocument PhP

我制作了一個類,它讀取值和值的節點名稱,並將其組合到數組中,以將其用作對XML中的config的簡單快速訪問。 但是此解決方案僅在不適用於底層節點時才有效,XML看起來像這樣。

<?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>

現在,我想獲取整個db節點,並將其作為一個數組返回,其中節點名稱wold是鍵和節點值value。 但我堅持這一點。 這是我到目前為止所做的。

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>';
    }
}  

}

您可以這樣使用XPath:

$xp = new DOMXPath($domDocument);

$config = array();
foreach ($xp->query('./db/*') as $node) {
        $config[$node->nodeName] = $node->textContent;
}

return $config;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM