@prostovlad

Как выделить то что между 2 тегами?

Есть xml файл, в нем есть значения
<paramname><![CDATA[Модель]]></paramname>
					<paramvalue><![CDATA[RAK-35REF/RAC-35WEF]]></paramvalue>
					<paramname><![CDATA[Коэффициент SEER / Класс сезонной энергоэффективности (охлаждение)]]></paramname>
					<paramvalue><![CDATA[6,1/A++]]></paramvalue>
					<paramname><![CDATA[Коэффициент/Класс сезонной энергоэффективности (нагрев), SCOP]]></paramname>
					<paramvalue><![CDATA[4,2/A+]]></paramvalue>
					<paramname><![CDATA[Коэффициент/Класс энергоэффективности (охлаждение), EER]]></paramname>
					<paramvalue><![CDATA[3,21/A]]></paramvalue>
					<paramname><![CDATA[Производительность (охлаждение), кВт]]></paramname>
					<paramvalue><![CDATA[3,50 (0,90–4,00)]]></paramvalue>
					<paramname><![CDATA[Потребляемая мощность на охлаждение, кВт]]></paramname>

нужно вытащить значения между тегами paramname, то есть из строки
<paramname><![CDATA[Модель]]></paramname>
должно вытащится Модель
пробую несколькими способами которые нашел в сети, для примера вот эти
preg_match_all('/<paramname[^>]*?>(.*?)<\/paramname>/si',$xml,$matches);
preg_match_all('<paramname>([\s\S]+?)</paramname>',$xml,$matches);

не получилось, насколько я понимаю проблема в
<![CDATA[ ]]>
как можно решить этот вопрос?
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
preg_match_all('/<paramname>(.+)<\/paramname>/', $text, $matches); // <![CDATA[Модель]]>

preg_match_all('/<paramname><!\[CDATA\[(.+)\]\]><\/paramname>/', $text, $matches); //Модель


Test preg_match_all
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
preg_match_all('~<paramname[^<]*<!\[CDATA\[(.+)\]\]>[^<]*<\/paramname>~', $text, $matches);


А так же нет смысла парсить xml регулярками, когда можно воспользоваться предназначенной для этого библиотекой
С вашими входными данными необходимый результат можно получить примерно так

<?php
$xml = simplexml_load_string($text, null, LIBXML_NOCDATA);

print_r((array)$xml->characteristics->paramvalue);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы