Синтаксис php xpath - PullRequest
       11

Синтаксис php xpath

0 голосов
/ 08 февраля 2012

если этот код:

<code>$s = 'BrowseNodes/BrowseNode';
$temp_bnid=$item->xpath($s);
echo '<pre>
Root Search:
';
print_r($temp_bnid);
echo '
';die («остановлен для тестирования»);

дает этот вывод:

Root Search:
Array
(
    [0] => SimpleXMLElement Object
        (
            [BrowseNodeId] => 2522032011
            [Name] => Balls
            [Ancestors] => SimpleXMLElement Object
                (
                    [BrowseNode] => SimpleXMLElement Object
                        (
                            [BrowseNodeId] => 196601011
                            [Name] => Baby & Toddler Toys
                            [Ancestors] => SimpleXMLElement Object
                                (
                                    [BrowseNode] => SimpleXMLElement Object
                                        (
                                            [BrowseNodeId] => 165795011
                                            [Name] => Categories
                                            [IsCategoryRoot] => 1
                                            [Ancestors] => SimpleXMLElement Object
                                                (
                                                    [BrowseNode] => SimpleXMLElement Object
                                                        (
                                                            [BrowseNodeId] => 165793011
                                                            [Name] => Toys & Games
                                                    )

                                                )

                                        )

                                )

                        )

                )

        )

)

Halted for testing

и этот код:

<code>$s = 'BrowseNodes/BrowseNode[Name=Categories]';
// I also tried $s = 'BrowseNodes/BrowseNode[Name="Categories"]'; 
$temp_bnid=$item->xpath($s);
echo '<pre>
Root Search:
';
print_r($temp_bnid);
echo '
';die («остановлен для тестирования»);

выдает следующее:

Root Search:
Array
(
)

Halted for testing

Что я делаю неправильно, когда пытаюсь получить узел BrowseNode, который содержит узел "Name", где находится узел "Name"значение "Категории"?Альтернативным решением для этой проблемы было бы выбрать узел на наличие узла «IsCategoryRoot», но я действительно хочу узнать, как выполнить другой запрос, поскольку он может помочь мне в будущем.Niether работал с запросами, которые я обрабатывал.

Ответы [ 2 ]

1 голос
/ 08 февраля 2012

Я не уверен, потому что не могу эффективно читать дамп SimpleXML, но я думаю, что у вас есть произвольный потомок с дочерним элементом с именем Name, который содержит «Категории».Так что-то вроде:

BrowseNodes/BrowseNode//BrowseNode[Name="Categories"]

1 голос
/ 08 февраля 2012

вы пробовали это?

$s="BrowseNodes/BrowseNode/Name[text()='Categories']/..";

Какой должен выбрать родительский узел (то есть: browseNode) для узла Name, текст которого является Categories.

...