Получить значение атрибута xml

226
24 ноября 2017, 08:10

Доброго времени суток!

Язык программирования PHP. Преобразую строку в XML объект:

$xml = simplexml_load_string($xmlstr);

Вывожу на экран echo var_dump($xml);

Получаю такой результат:

object(SimpleXMLElement)#1 (6) {
  ["url"]=>
  object(SimpleXMLElement)#2 (1) {
    ["@attributes"]=>
    array(1) {
      ["domain"]=>
      string(13) "https://ya.ru"
    }
  }
  ["yaca"]=>
  object(SimpleXMLElement)#3 (1) {
    ["@attributes"]=>
    array(1) {
      ["url"]=>
      string(13) "https://ya.ru"
    }
  }
  ["tcy"]=>
  object(SimpleXMLElement)#4 (1) {
    ["@attributes"]=>
    array(2) {
      ["rang"]=>
      string(1) "6"
      ["value"]=>
      string(4) "9500"
    }
  }
  ["topics"]=>
  object(SimpleXMLElement)#5 (1) {
    ["topic"]=>
    object(SimpleXMLElement)#6 (1) {
      ["@attributes"]=>
      array(2) {
        ["title"]=>
        string(43) "Тема: Поисковые системы"
        ["url"]=>
        string(26) "http://yaca.yandex.ru/yca/"
      }
    }
  }
  ["textinfo"]=>
  string(113) "
Тема: Поисковые системы
Регион: Россия
Источник: Официальный"
  ["r1"]=>
  string(132) "wutwrfslmeextvlpphhotyoutxbmkulbvyuokbuxsocurtftohkircrhsjqjubpnlwfmxuhjgaxyxjrynbllcrqvtobsbtqiraide1d522c48423e52e8f6796dc9f1b3125"
}

Не могу сообразить, как мне получить значение value поля tcy. Обращаюсь как к массиву, но всегда пустой результат.

Добавил исходный XML:

<urlinfo>
<url domain="https://yandex.ru">
<![CDATA[ / ]]>
</url>
<yaca url="https://yandex.ru"/>
<tcy rang="6" value="380000"/>
<topics></topics>
<textinfo></textinfo>
<r1>
uvyerddwhdmcirwatmowxmyxpktyjugqbnhwbufhgmfvugvofkvjbfkaykbtndygknieqitmtjousnxtjjospvednwjemswehrlo68dda255ecb7540b7f383df508b14e8f
</r1>
</urlinfo>

Спасибо!

Answer 1

Могу ошибиться с позицонированием, не видя xml, но значения атрибута получаются просто указанием их имени как для ассоциативного массива. Вот так

echo $xml->tcy['value']

Подробнее об использовании Simplexml

Answer 2
function xmlAttribute($object, $attribute){
    if(isset($object[$attribute]))
        return (string) $object[$attribute];
    else
        return null;
}
$tcyValue=xmlAttribute($xml->tcy->attributes(),"value")

Если структуру не напутал. Весь смысл в том, что к св-ву объекта @attributes напрямую нельзя обратиться. Один раз даже получалось через переменную вроде, типа:

$attributes="@attributes";
echo $xml->tcy->$attributes['value'];

Но потом как-то не заладилось, и я стал всегда использовать вариант выше.

READ ALSO
Новичок в php задает вопрос) [требует правки]

Новичок в php задает вопрос) [требует правки]

Я только только начинаю разбираться в phpВот задание:

219
Можно ли писать сайты на С или C#?

Можно ли писать сайты на С или C#?

В интернете часто пишут, что делать сайты (серверное программирование) на языках типа С, С++, C#, Фортран, ТурбоПаскаль вроде как нереально, надо...

735
Поэтапная форма отправки

Поэтапная форма отправки

Всем доброго времени суток! Пишу поэтапную форму отправки с логикой: 1 этап -> запись в куку -> второй этап -> запись в куку -> подтверждение -> отправка...

236
Ошибочное перенаправление после входа joomla

Ошибочное перенаправление после входа joomla

При неверной авторизации на сайте (joomla 25

267