PHP и XmlWriter изменяют строку отступа

#php #xml #laravel #xmlwriter

#php #xml — файл #laravel #xmlwriter #xml

Вопрос:

Я использую laravel 5 и пытаюсь вывести XML-файл с помощью XMLWRITER. Можно ли изменить строку отступа с «одного пробела» на «табулирование»?

Мой фактический код :

     $xml = new XMLWriter();
    $xml->openMemory();
    $xml->setIndent(4);
    $xml->startDocument('1.0','UTF-8','yes');
    $xml->startElement('immeuble');
    $xml->writeAttribute('nature-immeuble', 'test');
    $xml->startElement('adresse');
    $xml->writeAttribute('localite', 'Copropriete');
    $xml->writeAttribute('libelle-pays', 'France');
    $xml->startElement('cadastre');
        $xml->writeAttribute('section', 'AA');
        $xml->writeAttribute('numero', '0000');
        $xml->endElement();
        $xml->endElement();
    foreach($lots as $lot) {
        $xml->startElement('lot');
        $xml->writeAttribute('numero', $lot->id);
        $xml->writeAttribute('type', 'appartement');
        $designation = getDesignation2($lot->id);
        $xml->writeAttribute('designation', $designation);
        $xml->writeAttribute('batiment', substr($lot->etageLots->first()->etage->batiment->nom, 0, 5));
        $xml->writeAttribute('etage', $lot->etageLots->first()->etage->coeff_id);
        if(is_null($lot->tantieme_force)){
            $tantieme = round($lot->tantieme_calcul,0);
        }else{
            $tantieme = $lot->tantieme_force;
        }
        $xml->writeAttribute('milliemes-generaux', $tantieme.$base);
        $xml->endElement();
    }
    $xml->endElement();
    $xml->endDocument();

    $content = $xml->outputMemory();
    $xml = null;

    return response($content)->header('Content-Type', 'text/xml');
  

Это дало мне правильный XML, но каждая строка имеет отступ с одним пробелом перед, и на самом деле мне нужна таблица.

Можно ли изменить этот параметр ?

Я видел строку set indent, но я не нашел способа использовать ее с табуляцией.

Спасибо за вашу помощь.

Комментарии:

1. Швы похожи на $xml->setIndent(); ожидание логического значения, а не количества ожидаемого пространства, я не могу попробовать, но, возможно php.net/manual/en/function.xmlwriter-set-indent-string.php это то, что вы ищете

2. Можно ли установить табуляцию внутри заданной строки отступа ? Я не нахожу HTML-код для составления таблиц.

3. Я не думаю, что это существует, но вы можете попробовать $xml->setIndentString("amp;nbsp;amp;nbsp;amp;nbsp;amp;nbsp;")

4. к сожалению, это не работает: ошибка в строке 3 в столбце 7: Объект ‘nbsp’ не определен

5. с $xml->setIndent(true); ранее?

Ответ №1:

Если вы хотите сделать отступ с помощью табуляции, используйте его следующим образом:

 $xml->setIndent(true);
$xml->setIndentString("t");