Как я могу сгенерировать этот формат XML с этим элементом

Вот каким должен быть результат:

<invoice:company this = "1">
    <invoice:transport from = "7777777777" to = "77777777777">
        <invoice:via via = "7777777777" id = "1"/>
    </invoice:transport>
</invoice:company>

Но я получаю следующее:

<company this = "1">
    <transport from = "7777777777" to = "77777777777">
        <via via = "7777777777" id = "1"/>
    </transport>
</company>

Я использую это как генератор XML:

$xml = new SimpleXMLElement('<?xml version = "1.0" encoding = "utf-8"?><invoice>
</invoice>');

//child of invoice
$company= $xml->addChild('company');

//child of company
$transport  = $processing->addChild('transport');
$transport->addAttribute('to','77777777777');
$transport->addAttribute('from','77777777777');

//child of transport
$via        = $transport->addChild('via');
$via->addAttribute('id','1');
$via->addAttribute('via','77777777777');

$xml->saveXML();
$xml->asXML("company_001.xml");'

Почему ":" в теге элемента? Как мне это сделать? Мне это тоже нужно.

Он называется xml namespace.

u_mulder 15.03.2018 09:53

Ваш фрагмент PHP не запускается. У вас есть ненужный ' в конце, а $processing не определен

BlobbyBob 15.03.2018 09:54
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как упоминалось в комментарии, invoice: - это пространство имен элементов в документе.

При создании XML-документа с пространством имен вам необходимо объявить его. В приведенном ниже коде я сделал это в исходном документе, загруженном в SimpleXMLElement. Я не знаю правильного определения этого пространства имен, поэтому я использовал "http://some.url" повсюду (и все ссылки необходимо изменить). Если вы не определяете это пространство имен, SimpleXML добавит его собственное определение при первом использовании.

При добавлении элементов вы можете определить, в какое пространство имен они будут добавлены, третий параметр addChild - это пространство имен.

Так...

$xml = new SimpleXMLElement('<?xml version = "1.0" encoding = "utf-8"?>
<invoice xmlns:invoice = "http://some.url">
</invoice>');

//child of invoice
$processing= $xml->addChild('company', "", "http://some.url");

//child of company
$transport  = $processing->addChild('transport', "", "http://some.url");
$transport->addAttribute('to','77777777777');
$transport->addAttribute('from','77777777777');

//child of transport
$via = $transport->addChild('via', "", "http://some.url");
$via->addAttribute('id','1');
$via->addAttribute('via','77777777777');

echo $xml->asXML();

Производит (я сформировал вывод, чтобы помочь) ...

<?xml version = "1.0" encoding = "utf-8"?>
<invoice xmlns:invoice = "http://some.url">
    <invoice:company>
        <invoice:transport to = "77777777777" from = "77777777777">
            <invoice:via id = "1" via = "77777777777" />
        </invoice:transport>
    </invoice:company>
</invoice>

Поскольку я не уверен, что это весь документ, который вы создаете, могут потребоваться незначительные изменения, но надеюсь, что это поможет.

Другие вопросы по теме