Убрать переносы в атрибуте xml при помощи php

328
05 августа 2017, 05:08

Есть xml файл выгруженный в строку вида

<catalog>
  <item id="111" name="Тут может содержаться ; которую не надо заменять" property="Дата;Имя;
  2017-01-01;Ivan;
  2017-02-02;Vova;" />
  <item id="112" name="Тут может содержаться ; которую не надо заменять" property="Дата;Имя;
  2017-01-02;Ivan;
  2017-02-03;Vova;" />
</catalog>

Ни как не могу привести код к виду

    <catalog>
      <item id="111" name="Тут может содержаться ; которую не надо заменять" property="Дата!тут мой символ1! Имя!тут мой символ1!!тут мой символ2!2017-01-01!тут мой символ1!Ivan!тут мой символ1!!тут мой символ2!2017-02-02!тут мой символ1!Vova!тут мой символ1!" />
      <item id="112" name="Тут может содержаться ; которую не надо заменять" property="Дата!тут мой символ1! Имя!тут мой символ1!!тут мой символ2!2017-01-02!тут мой символ1!Ivan!тут мой символ1!!тут мой символ2!2017-02-03!тут мой символ1!Vova!тут мой символ1!" />
    </catalog>

То есть мне необходимо заменить все переносы строк на !тут мой символ2!, а все точки с запятой на !тут мой символ1!, но тольк внутри атрибута property.

Answer 1

Вариант с использованием регулярных выражений:

<?php
$xml = '<catalog>
  <item id="111" name="Тут может содержаться ; которую не надо заменять" property="Дата;Имя;
  2017-01-01;Ivan;
  2017-02-02;Vova;" />
  <item id="112" name="Тут может содержаться ; которую не надо заменять" property="Дата;Имя;
  2017-01-02;Ivan;
  2017-02-03;Vova;" />
</catalog>';

$symb_1 = '!тут мой символ1!'; // Замена точки с запятой
$symb_2 = '!тут мой символ2!'; // Замена переносов

echo preg_replace_callback(
    '~property="[^"]+"~',
    function ($m) use ($symb_1, $symb_2) {
        if (!empty($m[0])) {
            $patt = ['~;~', "~\n~", '~\s{2,}~'];
            $symb = [$symb_1, $symb_2, null];
            return preg_replace($patt, $symb, $m[0]);
        }
    },
    $xml
);
READ ALSO
преобразование base64 в файл

преобразование base64 в файл

С клиента на сервер приходит json формы, в одном из полей которой храниться картинка в виде base64Как эту картинку средствами php5 сохранить на сервер...

295
Вывод checked елементов в таблицу на PHP

Вывод checked елементов в таблицу на PHP

Здравствуйте,у меня есть json файл который передается с формы на серверКак мне вывести все checked элементы в таблицу на PHP для отправки на эмейл

203
В чем может быть проблема c foreach?

В чем может быть проблема c foreach?

Почему такой результат???? Должен же быть:

199
Как выводить левый блок только на главной странице,а на всех остальных его скрывать?

Как выводить левый блок только на главной странице,а на всех остальных его скрывать?

Слева блок это категорииНа каждой странице (/cart или /register) видно этот блок

169