如何使用此元素生成此XML格式

时间:2018-03-15 08:47:18

标签: php xml simplexml

这是输出应该是:

<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");'

为什么元素标签上有“:”?我怎样才能做到这一点?我也需要这样做。

1 个答案:

答案 0 :(得分: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>

由于我不确定这是否是您创建的整个文档,因此可能需要进行细微更改,但希望这会有所帮助。