$xml = new SimpleXMLElement(''); // Definicja nazw elementów, które zawierają ceny $price_fields = [ 'cena_detaliczna_brutto_pln', // Dodaj tutaj inne pola cen, jeśli istnieją // 'cena_inna_field', ]; // Iteracja przez każdy produkt w źródłowym pliku XML foreach ($source_xml->product as $product) { // Tablica do przechowywania adresów URL obrazów $images = []; // Zmienne do przechowywania zawartości pól HTML $opis_krotki_html = ''; $opis_dlugi_korzysci_html = ''; // Zmienne do przechowywania nazwy produktu i SKU $original_nazwa_produktu = ''; $sku = ''; // Iteracja przez wszystkie dzieci elementu foreach ($product->children() as $child) { $child_name = $child->getName(); // Sprawdzenie, czy element jest jednym z obrazów (image_1, image_2, ..., image_25) if (preg_match('/^image_\d+$/', $child_name)) { $url = trim((string)$child); // Dodanie niepustego URL do tablicy obrazów if (!empty($url)) { $images[] = $url; } } // Zbieranie zawartości pól HTML do połączenia elseif ($child_name === 'opis_krotki_html') { $opis_krotki_html = (string)$child; } elseif ($child_name === 'opis_dlugi_korzysci_html') { $opis_dlugi_korzysci_html = (string)$child; } // Zbieranie oryginalnej nazwy produktu elseif ($child_name === 'nazwa_produktu') { $original_nazwa_produktu = (string)$child; } // Zbieranie SKU elseif ($child_name === 'sku') { $sku = (string)$child; } } // Utworzenie nowego elementu w nowym XML $new_product = $xml->addChild('product'); // Ponowna iteracja przez dzieci oryginalnego , aby skopiować nieobrazkowe i nie-HTML elementy foreach ($product->children() as $child) { $child_name = $child->getName(); // Pomijanie elementów obrazów i pól HTML, które będą połączone if (!preg_match('/^image_\d+$/', $child_name) && $child_name !== 'opis_krotki_html' && $child_name !== 'opis_dlugi_korzysci_html') { // Pobranie wartości elementu $value = (string)$child; // Sprawdzenie, czy element jest polem cenowym if (in_array($child_name, $price_fields)) { // Zamiana kropki na przecinek w wartości ceny $value = str_replace('.', ',', $value); } // Jeśli jest to nazwa produktu, modyfikujemy jej zawartość if ($child_name === 'nazwa_produktu') { // Dodanie "Sollux" przed oryginalną nazwą i SKU na końcu $value = $original_nazwa_produktu . ' Sollux ' . $sku; } // Dodanie elementu do nowego $new_child = $new_product->addChild($child_name); // Sprawdzenie, czy zawartość to HTML i potrzeba CDATA // Jeśli chcesz zachować tagi HTML, możesz użyć CDATA if (strpos($child_name, 'html') !== false) { $node = dom_import_simplexml($new_child); $no = $node->ownerDocument; $node->appendChild($no->createCDATASection($value)); } else { $new_child[0] = htmlspecialchars($value); } } } // Połączenie zawartości pól HTML $combined_opis_html = ''; if (!empty($opis_krotki_html)) { $combined_opis_html .= $opis_krotki_html; } if (!empty($opis_dlugi_korzysci_html)) { // Dodanie separatora, np. nowa linia lub spacja if (!empty($combined_opis_html)) { $combined_opis_html .= "\n"; // Możesz zmienić na '
' lub inny separator, jeśli potrzebujesz } $combined_opis_html .= $opis_dlugi_korzysci_html; } // Dodanie połączonego pola do nowego , jeśli zawartość nie jest pusta if (!empty($combined_opis_html)) { $opis_html = $new_product->addChild('opis_html'); $node = dom_import_simplexml($opis_html); $no = $node->ownerDocument; $node->appendChild($no->createCDATASection($combined_opis_html)); } // Połączenie wszystkich adresów URL obrazów w jeden ciąg oddzielony przecinkami $images_str = implode(',', $images); // Dodanie nowego elementu do nowego $new_product->addChild('images', htmlspecialchars($images_str)); } // Zapisanie nowego pliku XML na serwerze if($xml->asXML($target_file)) { echo "Nowy plik XML został utworzony: $target_file"; } else { echo "Wystąpił błąd podczas zapisywania nowego pliku XML."; } ?>