Результат XPath как массив именованных ключей в PHP - PullRequest
1 голос
/ 18 февраля 2011

Разбор Dom с PHP - это боль. Конечно, если вы посмотрите, как это просто с JavaScript.

Вот так я получаю все атрибуты от каждого элемента ввода:

$dom = new DOMDocument();
$dom->loadHTML('<form><input type="text" required /><input type="password" name="password" required /></form>');
$xpath = new DOMXPath($dom);

$result = $xpath->query('//input/@*');

foreach($result as $key=>$value) {

    echo $key . ': ' . $value->nodeValue . '<br />';
}

Как вы можете получить именованные ключи вместо нумерованных ключей?

1 Ответ

4 голосов
/ 18 февраля 2011

Разбор Dom в PHP аналогичен JS, поскольку они используют один и тот же интерфейс (стандарт Document Object Model ) ... Единственное отличие состоит в том, что в JS легко анализировать отдельные элементы (тогда какв PHP он держится ниже API, поскольку он реализован в C).

Теперь, для вашего точного вопроса, тип возврата $value равен DomAttr .Так что это должно сделать это для вас:

echo $value->name . ': ' . $value->value . '<br />';

Редактировать: Относительно вашего комментария.Сделайте это так:

$result = $xpath->query('//input');

$inputs = array();
foreach($result as $element) {
    $current = array();
    foreach ($element->attributes as $attribute) {
        $current[$attribute->name] = $attribute->value;
    }
    $inputs[] = $current;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...