我正在编辑XML文件,根节点的所有子节点都有前缀“cfdi”。当我添加一个新节点时,它包含前缀cfdi,但我想将其更改为另一个前缀。我怎么能这样做?
样品:
<cfdi:comprobante>
<cfdi:emisor></cfdi:emisor>
<cfdi:receptor></cfdi:receptor>
<cfdi:addenda>
<cfdi:factura />
<cfdi:ordenCompra />
</cfdi:addenda>
</cfdi:comprobante>
我的代码就是这个
$Addenda = $xml->addChild('Addenda');
$factura = $Addenda->addChild('htx:factura');
$oc = $Addenda->addChild('htx:ordenCompra');
我的预期输出必须是这样的。
<cfdi:comprobante>
<cfdi:emisor></cfdi:emisor>
<cfdi:receptor></cfdi:receptor>
<cfdi:addenda>
<htx:factura />
<htx:ordenCompra />
</cfdi:addenda><br>
</cfdi:comprobante>
答案 0 :(得分:0)
请尝试以下代码,而不是$Addenda->addChild('htx:factura')
$Addenda->addChild('htx:htx:factura');
答案 1 :(得分:0)
好的,您正在使用墨西哥CFDI,并且我认为您的XML文档要大得多。
必须包括xml名称空间声明,例如xmlns:cfdi="http://www.sat.gob.mx/cfd/3"
。命名空间为http://www.sat.gob.mx/cfd/3
,前缀为cfdi
,因此,任何以cfdi:
为前缀的节点都属于http://www.sat.gob.mx/cfd/3
命名空间。
要添加新的名称空间,必须在第三个参数$Addenda->addChild('htx:factura', '', NAMESPACE_HERE);
中指定名称空间,请遵循以下示例:
$comprobante = new SimpleXmlElement('<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" version="3.3"/>');
$factura = $comprobante->addChild('htx:factura', '', 'http://example.com/htx-namespace');
echo $comprobante->asXml();
将产生:
<?xml version="1.0"?>
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3" version="3.3">
<htx:factura xmlns:htx="http://example.com/htx-namespace"/>
</cfdi:Comprobante>
PD:您可能会在phpCfdi社区上找到有关PHP和CFDI的帮助。