php simplexmlelement прямой доступ к элементу - PullRequest
0 голосов
/ 27 февраля 2012

У меня есть простая XML-структура, подобная той, что при разборе с simplexml_load_string генерирует это:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [token] => rs2rglql9c8ztem
        )

    [attachments] => SimpleXMLElement Object
        (
            [attachment] => 112979696
        )
)

структура XML:

<uploads token="vwl3u75llktsdzi">
  <attachments>
    <attachment>123456789</attachment>
  </attachments>
</uploads>

Я могу добраться до единственного действительно важного значения "123456789" через итерацию, но это фаф. Есть ли способ, которым я могу получить к нему доступ напрямую, в идеале, используя имена элементов.

Мне нужно иметь возможность получить атрибуты в идеале.

Ответы [ 2 ]

4 голосов
/ 27 февраля 2012

Самый простой способ сохранить значение текстового узла SimpleXMLElement в его собственной переменной - привести элемент к строке:

$xml = simplexml_load_string($str);
$var = (string) $xml->attachments->attachment;
echo $var;

UPDATE

В соответствии с дополнительным вопросом в вашем комментарии, метод SimpleXMLElement::attributes docs также вернет объект SimpleXMLElement, к которому можно получить доступ в таким же образом, как вышеупомянутое решение. Рассмотрим:

$str = '<uploads token="vwl3u75llktsdzi">
  <attachments>
    <attachment myattr="attribute value">123456789</attachment>
  </attachments>
</uploads>';

$xml  = simplexml_load_string($str);
$attr = (string) $xml->attachments->attachment->attributes()->myattr;
echo $attr; // outputs: attribute value
0 голосов
/ 21 февраля 2015

Да, вы можете использовать синтаксис {} здесь:

$xmlString = '<uploads token="vwl3u75llktsdzi">
  <attachments>
    <attachment myattr="attribute value">123456789</attachment>
  </attachments>
</uploads>';

$xml  = simplexml_load_string($xmlString);
echo "attachment attribute: " . $xml->{"attachments"}->attributes()["myattr"] " \n";
echo " uploads attribute: " . $xml->{"uploads"}->attributes()["token"] . "\n";

вы можете заменить «attachments» на $ myVar или что-то еще

запомнить attribute () возвращает ассоциативный массив, такВы можете получить ключи с помощью php array_keys () или выполнить цикл foreach.

...