Как в узлах <type> изменить текстовое значение на

Статус
В этой теме нельзя размещать новые ответы.

djodofin

Постоялец
Регистрация
6 Июл 2017
Сообщения
328
Реакции
138
Использую плагин wp all import.


Делаю импорт с разных xml файлов.


пример структуры:


1)

1-semple.xml


XML:
<?xml version="1.0" encoding="UTF-8"?>

<root>

<kyero>

<feed_version>3</feed_version>

</kyero>


<property>

<type><![CDATA[Detached Villa]]></type>

<town>Ciudad Quesada</town>

</property>


<property>

<type><![CDATA[Semi Detached Villa]]></type>

<town>Benijofar</town>

</property>

</root>


2)

2-semple.xml

XML:
<?xml version="1.0" encoding="UTF-8"?>

<root>

<kyero>

<feed_version>3</feed_version>

</kyero>


<property>

<type>semi-detached-villa</type>

<town>Villena</town>

</property>


<property>

<type>Semi</type>

<town>Elda</town>

</property>

</root>


3)

3-semple.xml

XML:
<?xml version="1.0" encoding="UTF-8"?>

<root>

<kyero>

<feed_version>3</feed_version>

</kyero>


<property>

<type>Semi-Detached House</type>

<town>Villena</town>

</property>


<property>

<type>Semi - Detached Villa</type>

<town>Elda</town>

</property>

</root>


Мне нужно в узлах <type> изменить текстовое значение на SemiDetached.

Я использую функцию str_replace.


Код:
function house_type_propertynew($type){

$type = str_replace('Semi Detached Villa', 'SemiDetached', $type);

$type = str_replace('Detached Villa', 'SemiDetached', $type);

$type = str_replace('Semi-Detached House', 'SemiDetached', $type);

$type = str_replace('Semi', 'SemiDetached', $type);

$type = str_replace('Semi-Detached House', 'SemiDetached', $type);

$type = str_replace('Semi - Detached Villa', 'SemiDetached', $type);

return $type;}


В результате получается вместо "SemiDetached" несколько значений:


SemiDetached - SemiDetached

SemiDetachedDetached

SemiDetached-detached


Тоесть текст дублирует, смешивается, по разному складывается но не дает нужный результат "SemiDetached"!


Что я делаю нетак?
 
Использую плагин wp all import.


Делаю импорт с разных xml файлов.


пример структуры:


1)

1-semple.xml


XML:
<?xml version="1.0" encoding="UTF-8"?>

<root>

<kyero>

<feed_version>3</feed_version>

</kyero>


<property>

<type><![CDATA[Detached Villa]]></type>

<town>Ciudad Quesada</town>

</property>


<property>

<type><![CDATA[Semi Detached Villa]]></type>

<town>Benijofar</town>

</property>

</root>


2)

2-semple.xml

XML:
<?xml version="1.0" encoding="UTF-8"?>

<root>

<kyero>

<feed_version>3</feed_version>

</kyero>


<property>

<type>semi-detached-villa</type>

<town>Villena</town>

</property>


<property>

<type>Semi</type>

<town>Elda</town>

</property>

</root>


3)

3-semple.xml

XML:
<?xml version="1.0" encoding="UTF-8"?>

<root>

<kyero>

<feed_version>3</feed_version>

</kyero>


<property>

<type>Semi-Detached House</type>

<town>Villena</town>

</property>


<property>

<type>Semi - Detached Villa</type>

<town>Elda</town>

</property>

</root>


Мне нужно в узлах <type> изменить текстовое значение на SemiDetached.

Я использую функцию str_replace.


Код:
function house_type_propertynew($type){

$type = str_replace('Semi Detached Villa', 'SemiDetached', $type);

$type = str_replace('Detached Villa', 'SemiDetached', $type);

$type = str_replace('Semi-Detached House', 'SemiDetached', $type);

$type = str_replace('Semi', 'SemiDetached', $type);

$type = str_replace('Semi-Detached House', 'SemiDetached', $type);

$type = str_replace('Semi - Detached Villa', 'SemiDetached', $type);

return $type;}


В результате получается вместо "SemiDetached" несколько значений:


SemiDetached - SemiDetached

SemiDetachedDetached

SemiDetached-detached


Тоесть текст дублирует, смешивается, по разному складывается но не дает нужный результат "SemiDetached"!


Что я делаю нетак?
PHP:
function house_type_propertynew($type){
$type = preg_replace('/<type>(.*?)<\/type>/', '<type>SemiDetached</type>', $type);
return $type;}

Код:
$type = str_replace('Semi', 'SemiDetached', $type);
$type = str_replace('Detached Villa', 'SemiDetached', $type);

эти строки как минимум все портят str_replace работает последовательно
 
PHP:
function house_type_propertynew($type){
$type = preg_replace('/<type>(.*?)<\/type>/', '<type>SemiDetached</type>', $type);
return $type;}

Код:
$type = str_replace('Semi', 'SemiDetached', $type);
$type = str_replace('Detached Villa', 'SemiDetached', $type);

эти строки как минимум все портят str_replace работает последовательно
Спасибо zzallexx за ответ.

Извиняюсь, но xml файлах есть и другие значения в узлах <type> какие необходимо изменить на другие текстовое значения, также есть значения в узлах <type> которые не надо изменять.

В вашем примере значения во всех узлах <type> будет изменино на "SemiDetached".

Пример какие необходимо изменить:
Код:
function house_type_propertynew($type){
$type = str_replace('Parking Space', 'garage', $type);
$type = str_replace('Apartamento', 'Apartment', $type);
$type = str_replace('Ground Floor', 'Apartment', $type);
$type = str_replace('Flat', 'Apartment', $type);
$type = str_replace('detached house', 'SemiDetached', $type);
$type = str_replace('Semi', 'SemiDetached', $type);
$type = str_replace('Detached Villa', 'SemiDetached', $type);
$type = str_replace('Semi-detached', 'SemiDetached', $type);
$type = str_replace('Semi-Detached House', 'SemiDetached', $type);
$type = str_replace('semi-detached-villa', 'SemiDetached', $type);
$type = str_replace('Semi - Detached Villa', 'SemiDetached', $type);
$type = str_replace('Terraced house', 'Town House', $type);
$type = str_replace('Townhouse', 'Town House', $type);
$type = str_replace('terraced house', 'Town House', $type);
$type = str_replace('House – Townhouse', 'Town House', $type);
$type = str_replace('Quad Bungalow', 'Quad', $type);
$type = str_replace('Quad House', 'Quad', $type);
$type = str_replace('Quadplex', 'Quad', $type);
$type = str_replace('Quad Villa', 'Quad', $type);
$type = str_replace('Chalet', 'Villa', $type);
$type = str_replace('Chalets Pareados', 'Villa', $type);
$type = str_replace('Village house', 'Villa', $type);
$type = str_replace('Village House', 'Villa', $type);
$type = str_replace('Villa with annex', 'Villa', $type);
$type = str_replace('Villas Pareados', 'Villa', $type);
$type = str_replace('Finca / Country Property', 'Country Estate', $type);
$type = str_replace('finca', 'Country Estate', $type);
$type = str_replace('Country Property/Finca', 'Country Estate', $type);
$type = str_replace('Country Property', 'Country Estate', $type);
$type = str_replace('Country House', 'Country Estate', $type);
$type = str_replace('Plot of Land', 'Plot', $type);
$type = str_replace('Building Plot', 'Plot', $type);
$type = str_replace('land', 'Plot', $type);
$type = str_replace('Land', 'Plot', $type);
$type = str_replace('Restoration Project', 'Plot', $type);
$type = str_replace('Duplex apartment', 'Duplex', $type);
$type = str_replace('Bar', 'Restaurants and Bars', $type);
$type = str_replace('Bar/Restaurant', 'Restaurants and Bars', $type);
$type = str_replace('Commercial Unit', 'commercial', $type);
$type = str_replace('Commercial Building', 'commercial', $type);
$type = str_replace('Locales Comerciales', 'commercial', $type);
$type = str_replace('Business premises', 'commercial', $type);
$type = str_replace('Bungalows Planta Baja', 'Bungalow', $type);
$type = str_replace('Bungalows Planta Alta', 'Bungalow', $type);
return $type;}
 
ну в таком случае надо сначало чистить контент каким-то образом

$type = str_replace('-detached', '', $type);
$type = str_replace('-Detached House', '', $type);
$type = str_replace('-detached-villa', '', $type);
$type = str_replace(' - Detached Villa', '', $type);

и потом заменять

$type = str_replace('Semi', 'SemiDetached', $type);
 
Чтобы решить эту проблему, можно использовать массив с заменами и один вызов str_replace, который принимает массивы для замены и искомых значений. Таким образом, вы можете гарантировать, что все соответствующие значения будут заменены правильно.

Вот как можно переписать вашу функцию:
Код:
php
function house_type_propertynew($type) {
// Массив значений, которые нужно заменить
$search = [
'Semi Detached Villa',
'Detached Villa',
'Semi-Detached House',
'Semi',
'Semi - Detached Villa'
];
// Массив значений, на которые нужно заменить
$replace = [
'SemiDetached',
'SemiDetached',
'SemiDetached',
'SemiDetached',
'SemiDetached'
];
// Выполняем замену
$type = str_replace($search, $replace, $type);

return $type;
}

Объяснение:​

  1. Массивы search и replace: Мы создали два массива: один для значений, которые мы ищем ($search), и второй для значений, на которые мы их заменяем ($replace). Это упрощает процесс замены и делает код более читаемым.
  2. Единый вызов str_replace: Мы вызываем str_replace один раз с двумя массивами, что гарантирует, что все найденные значения будут заменены корректно.
Таким образом, функция должна правильно возвращать только значение "SemiDetached" для всех заданных входных данных.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху