2015-11-21 19 views
2

У меня есть этот XML:XPath получить узел по значению

<root> 
    <experiment accessCount="1" downloadCount="1">alfa</experiment> 
    <experiment accessCount="1" downloadCount="1">beta</experiment> 
</root> 

И я хотел бы обнаружить, если эксперимент узел со значением альфа существует. Но этот PHP-код возвращает мне все значения.

$this->xml = simplexml_load_file("data/stats.xml") or die("Error: Cannot create object"); 
    $node = $this->xml->xpath("/root[experiment='alfa']"); 

Где я ошибаюсь?

ответ

-1

Вы можете запросить значение узла с text():

$node = $this->xml->xpath("/root/experiment[text()='alfa']"); 
+2

Обратите внимание на небольшую разницу между этим и другим ответом. Использование '.' будет сочетаться (оно сочетается с' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '') все дети, как бы они ни были глубоки, Это может быть важно, если вам приходится иметь дело со смешанным контентом в элементе 'experiment'. – Abel

+1

Нет, вы не должны использовать text(). Используйте '[. = 'alfa'] '. как советовали @kjhughes. Использование 'text()' приведет к сбою, например, если текст содержит комментарии XML. –

2

Ваш XPath,

/root[experiment='alfa'] 

говорит:

Выберите root элем который содержит элемент experiment со строковым значением, равным 'alfa'.

Существует одна такая root элемент в вашем примере, и содержит какexperimental элементы.


Это XPath,

/root/experiment[.='alfa'] 

говорит:

Выберите experiment элемент со значением строки равным 'alfa'.

И выберет тот элемент experiment, который вы ищете.

Смежные вопросы