Вытянуть содержимое элемента из xml

12
Василич#
На сайте с 10.03.2009
Offline
111
532

Здравствуйте !

Такая задача, нужно вытянуть немного элементов, и структурировать их.

Есть xml файл с содержимым:

<entry>
<title>Название</title>
<link href="полная ссылка"/>
<id>идентификатор</id>
<updated>дата</updated>
<author>
<name>Контактное лицо Имя Фамилия</name>
</author>
<content type="html">
<![CDATA[ <p><strong>
Цена
15 000
руб.
</strong></p>
<p>
<img src="ссылка на картинку" alt="" style="width: auto; height: auto; max-height: 480px"/>
</p>

<p>Описание</p>

<p>Адрес </p>

<p>
телефон
<br />
<strong>Имя</strong>
(частное лицо)
</p>
]]>
</content>
</entry>

Пытаюсь выгрузить данные через Импорт новостей (DLE). Там все содержимое вытягивается и подставляется в доп. поля:

Собственно сам код скрипта:

https://pastebin.com/t0eubKik

Все конечно хорошо и работает, но по аналогии с другими полями (которые работают), мне нужно заполнять инфу выделенную красным (телефон) и отдавать в доп. поле телефон.

Пробую так:

preg_match_all("/+7(.*?)<br \/>/im", $content, $matches);
if ($matches != NULL) {
$xml->content[$i]['telefon'] = $matches[1];
}

но ничего не работает...

Помогите пожалуйста ! (Не обязательно бесплатно). Нужно вытянуть этот телефон в поле telefon (по аналогии с price, author, address)

Заранее спасибо.

bmw-power.com.ua (https://bmw-power.com.ua)
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#1

Так, телефон то как начинается, просто на +?

И что там их много?

preg_match_all('@\+7(.*?)<@smi', $content, $matches);

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
Василич#
На сайте с 10.03.2009
Offline
111
#2
LEOnidUKG:
Так, телефон то как начинается, просто на +?

И что там их много?

preg_match_all('@\+7(.*?)<@smi', $content, $matches);

Прежде всего, большое спасибо за ответ !

Телефон 1, начинается +7.

А как запихнуть вот в это: $xml->content[$i]['telefon'] = $matches[1]; ?

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#3

Если телефон 1, тогда

вместо:

preg_match_all

пишем:

preg_match

и оно запихнётся тогда

Василич#
На сайте с 10.03.2009
Offline
111
#4
LEOnidUKG:
Если телефон 1, тогда
вместо:
preg_match_all

пишем:
preg_match

и оно запихнётся тогда

большое спасибо за ответы ! Но в том то и дело, что результат мне нужно запихнуть в поле content[$i]['telefon']

---------- Добавлено 02.11.2018 в 21:23 ----------

Пробую вот так:

preg_match_all('@\+7(.*?)<@smi', $content, $matches);
if ($matches != NULL) {
$xml->content[$i]['telefon'] = $matches[1];
}

Но результат выходит: Array

P.s. телефоны вида +7 999 879-35-68

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#5

вы перед:

$xml->content[$i]['telefon'] = $matches[1];

напишите:

echo $matches[1]; exit;

посмотрите есть ли там данные.

Василич#
На сайте с 10.03.2009
Offline
111
#6
LEOnidUKG:
вы перед:

$xml->content[$i]['telefon'] = $matches[1];

напишите:
echo $matches[1]; exit;
посмотрите есть ли там данные.

Пишет Array

Пробую так:

preg_match_all('@\+7(.*?)<br \/>', $content, $matches);
if ($matches != NULL) {
$xml->content[$i]['telefon'] = $matches[1];
}

Выводит данные из строки выше (этой):

preg_match("/(Московская область.*?|Москва.*?)<\/p>/im", $content, $matches);
if ($matches != NULL) {
$xml->content[$i]['address'] = $matches[1];
}
LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#7

я вроде писал:

preg_match_all заменить на preg_match

Василич#
На сайте с 10.03.2009
Offline
111
#8

LEOnidUKG, сделал первым делом это, ничего не поменялось, более того, почему-то в другие строки вписывает значение адреса... бред какой-то

с preg_match выводит данные с этой строки:

preg_match("/(Московская область.*?|Москва.*?)<\/p>/im", $content, $matches);
if ($matches != NULL) {
$xml->content[$i]['address'] = $matches[1];
}

и другие строки тоже почему-то затрагиваются и тоже в разнобой начинают эту инфу отдавать

LEOnidUKG
На сайте с 25.11.2006
Offline
1723
#9

Ну так надо переменную $matches обнулять перед каждым условием

$matches=array();

---------- Добавлено 02.11.2018 в 21:02 ----------

И зачем вы пробуете так:

preg_match_all('@\+7(.*?)<br \/>', $content, $matches);

Если я уже вам дал готовый вариант?

Василич#
На сайте с 10.03.2009
Offline
111
#10

эх......

вот такая вот у меня схема теперь:

$matches=array();

preg_match('@\+7(.*?)<br', $content, $matches);

echo $matches[1]; exit;

Только выводит пустоту... уже как только не пробовал...

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий