W
W
WebforSelf2020-09-25 01:06:13
PHP
WebforSelf, 2020-09-25 01:06:13

Why is the tag not closing properly in xml?

Such a problem in PHP, an XML structure is generated.
This delivery code works without problems and looks like

if($order->delivery_price>0 && !$order->separate_delivery)
      {
        $t1 = $t1->addChild ( 'Товар' );
        $t1->addChild ( "Ид", 'ORDER_DELIVERY');
        $t1->addChild ( "Наименование", 'Доставка');
        $t1->addChild ( "ЦенаЗаЕдиницу", $order->delivery_price);
        $t1->addChild ( "Количество", 1 );
        $t1->addChild ( "Сумма", $order->delivery_price);
        $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
        $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
        $t1_4 = $t1_3->addChild ( "Наименование", "ВидНоменклатуры" );
        $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );

        $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
        $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
        $t1_4 = $t1_3->addChild ( "Наименование", "ТипНоменклатуры" );
        $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );
        
      }


And in XML

spoiler

<Товар>
                <Ид>ORDER_DELIVERY</Ид>
                <Наименование>Доставка</Наименование>
                <ЦенаЗаЕдиницу>215.00</ЦенаЗаЕдиницу>
                <Количество>1</Количество>
                <Сумма>215.00</Сумма>
                <ЗначенияРеквизитов>
                    <ЗначениеРеквизита>
                        <Наименование>ВидНоменклатуры</Наименование>
                        <Значение>Услуга</Значение>
                    </ЗначениеРеквизита>
                </ЗначенияРеквизитов>
                <ЗначенияРеквизитов>
                    <ЗначениеРеквизита>
                        <Наименование>ТипНоменклатуры</Наименование>
                        <Значение>Услуга</Значение>
                    </ЗначениеРеквизита>
                </ЗначенияРеквизитов>
            </Товар>



You need to add an exact copy only with a different name, for this I do this

spoiler

// Доставка
      if($order->delivery_price>0 && !$order->separate_delivery)
      {
        $t1 = $t1->addChild ( 'Товар' );
        $t1->addChild ( "Ид", 'ORDER_DELIVERY');
        $t1->addChild ( "Наименование", 'Доставка');
        $t1->addChild ( "ЦенаЗаЕдиницу", $order->delivery_price);
        $t1->addChild ( "Количество", 1 );
        $t1->addChild ( "Сумма", $order->delivery_price);
        $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
        $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
        $t1_4 = $t1_3->addChild ( "Наименование", "ВидНоменклатуры" );
        $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );

        $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
        $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
        $t1_4 = $t1_3->addChild ( "Наименование", "ТипНоменклатуры" );
        $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );
        
      }
      
            // Оплата за наложенный платеж
      if($order->payment_price>0)
      { 
        $t1 = $t1->addChild ( 'Товар' );
        $t1->addChild ( "Ид", 'DOP_PAYMENT');
        $t1->addChild ( "Наименование", 'Наложенный');
        $t1->addChild ( "ЦенаЗаЕдиницу", $order->payment_price);
        $t1->addChild ( "Количество", 1 );
        $t1->addChild ( "Сумма", $order->payment_price);
        $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
        $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
        $t1_4 = $t1_3->addChild ( "Наименование", "ВидНоменклатуры" );
        $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );

        $t1_2 = $t1->addChild ( "ЗначенияРеквизитов" );
        $t1_3 = $t1_2->addChild ( "ЗначениеРеквизита" );
        $t1_4 = $t1_3->addChild ( "Наименование", "ТипНоменклатуры" );
        $t1_4 = $t1_3->addChild ( "Значение", "Услуга" );	
      }



and an error is obtained in XML - the tag Product of the first block completely wraps both blocks, but should just go one after another.

spoiler

<Товар>
                <Ид>ORDER_DELIVERY</Ид>
                <Наименование>Доставка</Наименование>
                <ЦенаЗаЕдиницу>215.00</ЦенаЗаЕдиницу>
                <Количество>1</Количество>
                <Сумма>215.00</Сумма>
                <ЗначенияРеквизитов>
                    <ЗначениеРеквизита>
                        <Наименование>ВидНоменклатуры</Наименование>
                        <Значение>Услуга</Значение>
                    </ЗначениеРеквизита>
                </ЗначенияРеквизитов>
                <ЗначенияРеквизитов>
                    <ЗначениеРеквизита>
                        <Наименование>ТипНоменклатуры</Наименование>
                        <Значение>Услуга</Значение>
                    </ЗначениеРеквизита>
                </ЗначенияРеквизитов>
                <Товар>
                    <Ид>ORDER_DELIVERY</Ид>
                    <Наименование>Доставка</Наименование>
                    <ЦенаЗаЕдиницу>215.00</ЦенаЗаЕдиницу>
                    <Количество>1</Количество>
                    <Сумма>215.00</Сумма>
                    <ЗначенияРеквизитов>
                        <ЗначениеРеквизита>
                            <Наименование>ВидНоменклатуры</Наименование>
                            <Значение>Услуга</Значение>
                        </ЗначениеРеквизита>
                    </ЗначенияРеквизитов>
                    <ЗначенияРеквизитов>
                        <ЗначениеРеквизита>
                            <Наименование>ТипНоменклатуры</Наименование>
                            <Значение>Услуга</Значение>
                        </ЗначениеРеквизита>
                    </ЗначенияРеквизитов>
                </Товар>
            </Товар>



What is wrong? Everything seems to be closed without errors

Answer the question

In order to leave comments, you need to log in

1 answer(s)
S
scottparker, 2020-09-25
@scottparker

$t1 = $t1->addChild ( 'Товар' );
here in this (these) reassignments of the variable t1

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question