PHP - вопрос Dom Xpath - PullRequest
       10

PHP - вопрос Dom Xpath

0 голосов
/ 31 января 2011

С этим XML:

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

Код:

<code>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 . '
');}}} return $ configuration_array;}

Почему он печатает базы данных 5 раз?Я звоню get ('/ database') ... Спасибо.

Ответы [ 2 ]

1 голос
/ 01 февраля 2011

Почему он печатает базы данных 5 раз?Я называю get ('/ database')

Поскольку верхний элемент databases имеет 5 дочерних узлов: 2 элемента и три текстовых узла (только для пробелов), окружающие элементы.

1 голос
/ 31 января 2011

Есть также пробелы, которые тоже являются дочерними узлами (textNodes)

Игнорировать текстовые узлы:

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

... или используйте также XPATH для получения дочерних (элемент) -узлов.

Вы также можете игнорировать пробелы с самого начала (как описано в теме, связанной сГордон):

$dom_object = new DOMDocument();
$dom_object->preserveWhiteSpace=false;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...