2013-04-18 4 views
0

Это фрагмент XML, что я работаю с:SimpleXML не может получить доступ к детям

<category name="pizzas"> 
    <item name="Tomato &amp; Cheese"> 
     <price size="small">5.50</price> 
     <price size="large">9.75</price> 
    </item> 
    <item name="Onions"> 
     <price size="small">6.85</price> 
     <price size="large">10.85</price> 
    </item> 
    <item name="Peppers"> 
     <price size="small">6.85</price> 
     <price size="large">10.85</price> 
    </item> 
    <item name="Broccoli"> 
     <price size="small">6.85</price> 
     <price size="large">10.85</price> 
    </item> 
</category> 

Это то, что мой PHP выглядит следующим образом:

$xml = $this->xml; 
$result = $xml->xpath('category/@name'); 
foreach($result as $element) { 
    $this->category[(string)$element] = $element->xpath('item'); 
} 

все работает нормально, за исключением $ элемента -> XPath ('элемент'); Я также пробовал использовать: $ element-> children(); а также другие запросы xpath, но все они возвращают null. Почему я не могу получить доступ к детям категории?

+4

чувак, используйте 'category/item' – ajreal

ответ

1

Похоже, вы пытаетесь построить дерево по категориям, под которым зависит название категории. Чтобы сделать это, вы должны изменить свой код, чтобы выглядеть следующим образом:

$xml = $this->xml; 

//Here, match the category tags themselves, not the name attribute. 
$result = $xml->xpath('category'); 
foreach($result as $element) { 
    //Iterate through the categories. Get their name attributes for the 
    //category array key, and assign the item xpath result to that. 
    $this->category[(string)$element['name']] = $element->xpath('item'); 
} 

С исходным кодом здесь: $result = $xml->xpath('category/@name'); вашего результатом было именем атрибут узла, который, как атрибуты, не может иметь детей.

Теперь, если вам просто нужен список всех предметов, вы можете использовать $xml->xpath('category/items'), но это не похоже на то, что вы хотели.

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