2015-12-08 5 views
1

У меня есть следующий код:граф узлов с помощью XPath и подсчета

<?php 
$xmlString = ' 
     <SHOP xmlns="http://www.example.com/ns/offer/1.0"> 
      <SHOPITEM> 
       <ID>1</ID> 
       <PRODUCT>T-shirt</PRODUCT> 
       <PRICE>19,22</PRICE> 
      </SHOPITEM> 
      <SHOPITEM> 
       <ID>2</ID> 
       <PRODUCT>Trousers</PRODUCT> 
       <PRICE>87,54</PRICE> 
      </SHOPITEM> 
     </SHOP>'; 
$xml = simplexml_load_string($xmlString); 
$x_s_products = $xml->xpath("/SHOP/SHOPITEM"); 
$cnt_x_products = count($x_s_products); 
echo $cnt_x_products; 
?> 

Проблема заключается в том, что $cnt_x_products 0. Но это не так. Если я удалю атрибут xmlns, все в порядке. Но у меня должен быть этот атрибут. Спасибо за ваш совет.

+0

http://php.net/manual/ ru/domxpath.registernamespace.php? –

+0

@MarcB Как он решает мою проблему? Он не возвращает мне правильное количество узлов SHOPITEM. –

+1

, потому что, если удаление атрибута пространства имен заставляет вещи работать, то очевидно, что это пространство имен, вызывающее проблемы, и его регистрация устранит настоящую проблему. –

ответ

2

При использовании namespcae, вы должны register это пространство имен:

$xml->registerXPathNamespace('n', 'http://www.example.com/ns/offer/1.0'); 

теперь это работает:

$x_s_products = $xml->xpath("//n:SHOPITEM"); 
$cnt_x_products = count($x_s_products); 
echo $cnt_x_products; 

выходы 2.

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