Есть .XML
:
<xml><at><file><a href='11'>Текст</a></file></at></xml>
Получаю так $xml->file
Выводит ничего, либо чистый текст в некоторых случаях.
Необходимо же получить все,ничего не теряя. Простыми словами, получать как текст и отдавать браузеру...
Загружаю через simplexml_load_file()
.Так удобнеё в разы. Могу доставать любой текст с любых узлов, но при доставании DOM - проблема.
Давайте разберемся по шагам. Конечная наша цель, это отобразить ссылку из XML именно в таком виде, в котором она там представлена.
1) Раз вы пытались сделать это через simplexml_load_file
- начнем с него
Имея изначальную структуру xml
в виде
<xml>
<at>
<file>
<a href='11'>Текст</a>
</file>
</at>
</xml>
и при загрузке её в переменную, допустим
$xml = simplexml_load_file($someXMLfile)
, мы действительно ничего не увидим, обращаясь так: $xml->file
.
Просто потому, что, как минимум, перед узлом file
у нас есть еще узел at
.
Если мы напишем
echo '<pre>';
print_r($xml);
echo '</pre>';
То увидим структуру:
SimpleXMLElement Object
(
[at] => SimpleXMLElement Object
(
[file] => SimpleXMLElement Object
(
[a] => Текст
)
)
)
Что и логично (Мы не видим в структуре слова xml
потому, что это корень элемента и $xml
указывает на него в итоге).
Значит, чтобы добраться до узла file
нужно, как минмум, обращаться вот так:
$xml->at->file
, а добраться до ссылки: $xml->at->file->a
.
Чтобы посмотреть аттрибуты узла, можно воспользоваться функцией attributes()
. Например вот мы посмотрим атрибуты узла a
;
echo '<pre>';
print_r($xml->at->file->a->attributes());
echo '</pre>';
Получим:
SimpleXMLElement Object
(
[@attributes] => Array
(
[href] => 11
)
)
В итоге для того, чтобы получить нам ровно такую же ссылку, как в XML, нам нужно самим сформировать эту ссылку, добавляя при этом в нужные места текст и значение атрибута из XML.
В итоге получим в файле php
:
<?php
$link = $xml->at->file->a;
?>
<a href="<?php echo $link->attributes()->href; ?>"><?php echo $link; ?></a>
<?php
// какой-то еще код
?>
Лично для меня это более наглядный, т.к. понятно что и откуда мы берем.
2) Способ разбора, используя SimpleXMLElement
, следуя его документации
Тут все просто:
// загружаем xml
$file = "<xml><at><file><a href='http://test.ru' id='test'>Текст</a></file></at></xml>";
// Создаем объект из файла
$xml = new SimpleXMLElement($file);
// обращаемся к нужному узлу и применяем asXML();
// asXML- Возвращает сформированный XML документ в виде строки используя SimpleXML элемент
echo $xml->at->file->a->asXML();
Если ссылок много, то, можно обращаться по индексу (или можно перебрать в цикле):
$file = "<xml><at><file><a href='http://test.ru' id='test'>Текст</a><a href='http://test2.ru' id='test'>Текст2</a></file></at></xml>";
$xml = new SimpleXMLElement($file);
echo $xml->at->file->a[1]->asXML();
Выбирайте.
ВАЖНО! Не забывайте. Вы ВСЕГДА можете посмотреть структуру вашей XML используя var_dump
или print_r()
.
Пример
var_dump($xml)
или
echo '<pre>';
print_r($xml);
echo '</pre>';
Как можно настроить urlManager, чтобы ссылка http://advanced1/category/ua1-1 обрабатывалась actionIndex, притом последний параметр "ua1-1" может быть какой угодно например:...
Обе функции fputcsv и fgetcsv работают со строкамиЧитают/пишут по одной строке, т
Интервал взят из текстового бокса в определенном форматеБеру начало и конец интервала