Вот каким должен быть результат:
<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");'
Почему ":" в теге элемента? Как мне это сделать? Мне это тоже нужно.
Ваш фрагмент PHP не запускается. У вас есть ненужный ' в конце, а $processing не определен






Как упоминалось в комментарии, 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>
Поскольку я не уверен, что это весь документ, который вы создаете, могут потребоваться незначительные изменения, но надеюсь, что это поможет.
Он называется
xml namespace.