IvanIlyasov
@IvanIlyasov
Познаю мир

Как объединить дочерние элементы в один родительский, используя SimpleXML?

Есть xml-документ со следующей структурой:
XML-структура
<product>
            <id>6</id>
            <category_id>11</category_id>
            <code>99-00000810</code>
            <brand>Vision Hi-Tech</brand>
            <model>VC34BSHR-12</model>
            <title>Черно-белая корпусная видеокамера</title>
            <descr>Sony Super HAD, ч/б, 600 ТВЛ, 0,02 лк/F1.2, С/CS, AI DC/VI, AGC, BLC, FL, Gamma</descr>
            <price>7.7</price>
            <properties>
                <property>
                    <name>Матрица</name>
                    <value>1/3” Sony Super HAD</value>
                </property>
                <property>
                    <name>Макс. разрешение</name>
                    <value>600 ТВЛ</value>
                </property>
                <property>
                    <name>Мин. чувствительность</name>
                    <value>0,004 лк/F1.2</value>
                </property>
                <property>
                    <name>Фокусное расстояние</name>
                    <value>C-mount (f=17,5 мм) - CS-mount (f=12,5 мм)/Опция</value>
                </property>
                <property>
                    <name>Питание</name>
                    <value>DC 12 В/120 мА</value>
                </property>
            </properties>
        </product>

Задача в том, чтобы добиться такой структуры:
Что должно получиться
<product>
            <id>6</id>
            <category_id>11</category_id>
            <code>99-00000810</code>
            <brand>Vision Hi-Tech</brand>
            <model>VC34BSHR-12</model>
            <title>Черно-белая корпусная видеокамера</title>
            <descr>Sony Super HAD, ч/б, 600 ТВЛ, 0,02 лк/F1.2, С/CS, AI DC/VI, AGC, BLC, FL, Gamma</descr>
            <price>7.7</price>
            <property1>Матрица:1/3” Sony Super HAD</property>
            <property2>Макс. разрешение:600 ТВЛ</property>
            <property3>Мин. чувствительность:0,004 лк/F1.2</property>
            <property4>Фокусное расстояние:C-mount (f=17,5 мм) - CS-mount (f=12,5 мм)/Опция</property>
            <property5>Питание:DC 12 В/120 мА</property>
        </product>

В первую очередь задача состоит в том, чтобы объединить два дочерних элемента name и value, разделив их двоеточием. Потом переместить каждый такой эелемент (property) на один уровень выше, пронумеровать и убрать при этом properties. Возможно ли это сделать средствами SimpleXML?
  • Вопрос задан
  • 165 просмотров
Решения вопроса 1
roswell
@roswell
и швец, и жнец, и на дуде игрец
$input = new SimpleXMLElement(/* ... */);
foreach ($input->xpath('//product') as $product) {
    foreach ($product->xpath('properties/property') as $i => $property) {
        $product->addChild('property' . ($i + 1), $property->name->__toString() . ':' . $property->value->__toString());
    }
    unset($product->properties);
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы