Проблема пространства имен с SimpleXmlElement - PullRequest
0 голосов
/ 05 декабря 2018

У меня проблема с SimpleXMLElement.
Я должен создать XML, как здесь:

<p:father>
  <child></child>
</p:father>

Если я попытаюсь сделать это с SimpleXMLElement, результат будет:

<p:father>
  <p:child></p:child>
</p:father>

Таким образом, все дети имеют одинаковое пространство имен.PHP-код:

$xml = new SimpleXMLElement('<p:father xmlns:p="http://example.com" />');
$xml->addChild('child');

Кто-нибудь может мне помочь?Я должен сделать это для того, чтобы создать XML для Eletronical Invoicing.

1 Ответ

0 голосов
/ 10 декабря 2018

Проблема здесь заключается в том, что вы смешиваете элементы пространства имен с элементами без пространства имен: вы задаете пространство имен префиксом p:, но не устанавливаете пространство имен по умолчанию для элементов без префикса.SimpleXML, кажется, «услужливо» устанавливает ваш дочерний элемент в пространство имен p:, а не в пространство имен вообще.

Самое чистое решение, которое я могу найти, - это определить URI пространства имен для ваших элементов без префиксов,и затем передать это на addChild вызов:

$xml = new SimpleXMLElement('<p:father xmlns:p="http://example.com/prefixed" xmlns="http://example.com/default" />');
$xml->addChild('child', null, 'http://example.com/default');
echo $xml->asXML();

Что приводит к:

<?xml version="1.0"?> <p:father xmlns:p="http://example.com/prefixed" xmlns="http://example.com/default"><child/></p:father>
...