PHP замена переменных в .xml

user99

Постоялец
Регистрация
13 Янв 2008
Сообщения
141
Реакции
15
Добрый день!

Подскажите пожалуйста, как можно произвести замену переменных в .xml

Требуется замена значений в переменных:
ВремИнфПр="09.00.00" и ДатаИнфПр="01.01.2023"

<Файл ВерсПрог="СБиС3" ВерсФорм="5.01" ИдФайл="ON_NSCHFDOPPR">
<СвУчДокОбор>
<СвОЭДОтпр/>
</СвУчДокОбор>
<Документ ВремИнфПр="09.00.00" ДатаИнфПр="01.01.2023" КНД="1115131" НаимЭконСубСост=""" Функция="СЧФ">

Спасибо!
 
PHP:
$from = ['/(ВремИнфПр=)".+?"/', '/(ДатаИнфПр=)".+?"/'];
$to = ['$1"77.77.77"', '$1"14.02.2048"'];
echo preg_replace($from, $to, $xml);
 
Как сохранить изменения?

if (file_exists('1.xml')) {
$xml = simplexml_load_file('1.xml');

echo '<pre>';
print_r($xml);
echo '/<pre>';
} else {
exit('Failed to open');
}

$from = ['/(ВремИнфПр=)".+?"/', '/(ДатаИнфПр=)".+?"/'];
$to = ['$1"77.77.77"', '$1"14.02.2048"'];
echo preg_replace($from, $to, $xml);


SimpleXMLElement Object
(
[@attributes] => Array
(
[ВерсПрог] => СБиС3
[ВерсФорм] => 5.01
[ИдФайл] =>
)

[СвУчДокОбор] => SimpleXMLElement Object
(
[СвОЭДОтпр] => SimpleXMLElement Object
(
)

)

[Документ] => SimpleXMLElement Object
(
[@attributes] => Array
(
[ВремИнфПр] => 09.00.00
[ДатаИнфПр] => 01.01.2023
[КНД] => 1115131
[НаимЭконСубСост] =>
[Функция] => СЧФ
)
 
Вы не то делаете. Забудьте вообще о том, что это XML. Там что угодно может быть, разницы никакой.
  • Для начала, читаем файл обычным образом через file_get_contents();
  • Здесь может быть вызов preg_replace();
  • Далее, если действительно есть нужда работать с XML на уровне сущностей, то разбираете его из строки, работаете с ним и собираете обратно в строку. Если нет, то пропускаем это;
  • Здесь может быть вызов preg_replace();
  • Далее, пишем в файл обычным образом через file_put_contents().
 
Получилось, спасибо!

<?php
$file = '1.xml'; - сейчас имя файла указываю вручную
$xml = file_get_contents($file);
$from = ['/(ВремИнфПр=)".+?"/', '/(ДатаИнфПр=)".+?"/'];
$to = ['$1"77.77.77"', '$1"14.02.2048"'];
$xml=preg_replace($from, $to, $xml);
file_put_contents($file, $xml);
?>

Подскажите пожалуйста, как это выполнить например для всех файлов .xml в папке?
 
PHP:
foreach (glob('path/to/folder/*.xml') as $filename) {
    $xml = file_get_contents($filename);
    // Делаем что-то с файлом
}
 
Подскажите пожалуйста, регулярные выражения:

1) ON_NSCHFDOPPR_2BM000_000000_20220131_2D92AD7C-B4F1-4FF0-AAE4-07715B4FF770 - для выделенной части.

2) Для поиска города, например "Москва", "Санкт - Петербург" итд в строке $test = "... Москва – столица Российской Федерации ...", $test = "... Санкт-Петербург Санкт - Петербург ..."

Спасибо!
 
1.
Код:
/[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}/
2. Нужно несколько полных образцов строк, пока что не видно ничего.
 
Нужна опять Ваша консультация )

ON_NSCHFDOPPR_2BM000_000000_20220131_2D92AD7C-B4F1-4FF0-AAE4-07715B4FF770 - в выделенной части, нужно заменить все 0 на 7.

Пробовал через preg_replace и str_replace, не получилось.
 
PHP:
$regex = '/[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}/';
$where = 'ON_NSCHFDOPPR_2BM000_000000_20220131_2D92AD7C-B4F1-4FF0-AAE4-07715B4FF770';
echo preg_replace_callback($regex, fn($found) => str_replace('0', '7', $found[0]), $where);
 
Назад
Сверху