Запрос результата SimpleXML в PHP - PullRequest
0 голосов
/ 19 августа 2011

Я использую SimpleXml в PHP, и он хорошо работает для меня.

Недавно у меня возникла проблема при попытке захватить определенный узел (надеюсь, это правильный термин).

Вот пример XML

<xml>
    <attribute>
        <item name="fun_level">
            <value>Really Fun</value>
        </item>
    </attribute>
</xml>

Так что я использую simplexml, чтобы получить все атрибуты и запустить их через цикл, который все прекрасно работает. Однако, когда я хочу получить «значение» для элемента с определенным именем, у меня возникают проблемы.

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

$value = (string)$attribute->item[0]->value;

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

$value = (string)$attribute->item["@name='fun_level'"]->value;

Я предполагаю, что что-то не так с моим синтаксисом, когда я ссылаюсь на атрибут name элемента. Должен ли я использовать круглые скобки? уперся? Нужно ли делать что-то другое с кавычками?

Спасибо за помощь!

1 Ответ

4 голосов
/ 19 августа 2011

Вам необходимо использовать метод SimpleXMLElement::xpath().

<?php
error_reporting(-1);
ini_set('display_errors', true);

$xml = '<xml>
    <attribute>
        <item name="fun_level">
            <value>Really Fun</value>
        </item>
    </attribute>
</xml>';

$sxe = new SimpleXMLElement($xml);

foreach($sxe->xpath('//item[@name="fun_level"]') as $item){
    echo $item->value;
}

Также см. Страницу руководства, описывающую базовое использование SimpleXML , для получения дополнительных примеров.

...