PHP Получение XPath DOMNode - PullRequest
       5

PHP Получение XPath DOMNode

3 голосов
/ 15 апреля 2010

Я создаю документ XML на лету. и мне нужно знать XPath узла, который я только что создал. Я не вижу такой функции, как DOMNode::calculateXPath(void):string и я не хочу писать один по своему. существует ли какое-либо известное lite решение третьей стороны ??

Ответы [ 3 ]

3 голосов
/ 15 апреля 2010

Некоторое время назад был похожий вопрос, для которого я написал что-то вроде этого:

function calculateXPath(DOMNode $node)
{
    $q     = new DOMXPath($node->ownerDocument);
    $xpath = '';

    do
    {
        $position = 1 + $q->query('preceding-sibling::*[name()="' . $node->nodeName . '"]', $node)->length;
        $xpath    = '/' . $node->nodeName . '[' . $position . ']' . $xpath;
        $node     = $node->parentNode;
    }
    while (!$node instanceof DOMDocument);

    return $xpath;
}

Как уже упоминал Томаш, он определенно не так надежен и не рассчитан на будущее, как использование идентификаторов.

2 голосов
/ 18 мая 2012

Я знаю, что это немного устарело, но я добавляю это на тот случай, если кто-то другой ищет это.

Начиная с PHP 5.2 существует DomNode::getNodePath(), в котором DomElement расширяется.

См .: http://www.php.net/manual/en/domnode.getnodepath.php

2 голосов
/ 15 апреля 2010

Нет определенного XPath для данного узла, потому что XPath - это поисковый запрос. Как и в Google, вы можете найти конкретную страницу, используя различные условия поиска. Более того, запрос XPath, возвращающий текущий узел, может (вероятно, изменится) при изменении дерева DOM, поэтому путь, который вы можете получить, действителен только до следующей модификации дерева.

Вы можете присвоить каждому из ваших узлов уникальный идентификатор или имя класса (класс безопаснее, если вы хотите использовать другие идентификаторы - может быть несколько классов и только один идентификатор). Тогда вы можете искать, используя этот класс / ID.

Пример для диапазона тегов и класса unique_1 _:

//span[contains(@class, 'unique_1_')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...