我想将一些发票信息导出到一个xml文件中。它应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<Invoice xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:udt="urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:ccts="urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-2" xmlns:stat="urn:oasis:names:specification:ubl:schema:xsd:DocumentStatusCode-1.0" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:UBLVersionID>2.1</cbc:UBLVersionID>这是我使用的代码:
<?php
$xml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><Invoice/>');
$xml->addAttribute('xmlns', 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2');
$xml->addAttribute('xmlns:qdt', 'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2');
$xml->addAttribute('xmlns:cbc', 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2');
$xml->addAttribute('xmlns:udt', 'urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2');
$xml->addAttribute('xmlns:cac', 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2');
$xml->addAttribute('xmlns:ccts', 'urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2');
$xml->addAttribute('xmlns:udt', 'urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-2');
$xml->addAttribute('xmlns:stat', 'urn:oasis:names:specification:ubl:schema:xsd:DocumentStatusCode-1.0');
$xml->addChild('cbc:UBLVersionID', '2.1'); ?>但是当我运行php代码时,前缀就不存在了。我该如何解决这个问题呢?
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" udt="urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2" cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" ccts="urn:un:unece:uncefact:data:draft:UnqualifiedDataTypesSchemaModule:2" stat="urn:oasis:names:specification:ubl:schema:xsd:DocumentStatusCode-1.0">
<UBLVersionID>2.1</UBLVersionID>发布于 2015-11-16 23:52:48
您需要提供名称空间作为第三个参数:
$xml->addAttribute('qdt',
'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2',
'xmlns');
// some lines omitted...
$xml->addChild('UBLVersionID', '2.1', 'cbc');发布于 2015-11-17 00:01:24
您不需要将属性本身添加到正确的名称空间。
xmlns属性定义默认名称空间。属性本身不在命名空间中。
所有xmlns:*属性都是其他名称空间定义。它们使用保留的名称空间http://www.w3.org/2000/xmlns/。
因此,如果invoice是默认名称空间的一部分,则应该将该定义移动到模板XML中。
$xml = new SimpleXMLElement(
'<?xml version="1.0" encoding="UTF-8"?><Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"/>'
);
$xml->addAttribute(
'xmlns:qdt',
'urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2',
'http://www.w3.org/2000/xmlns/'
);
echo $xml->asXml();输出:
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:xmlns="http://www.w3.org/2000/xmlns/" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"/>但是您不需要手动添加命名空间属性,如果您将元素添加到命名空间中,则会根据需要添加定义:
$xmlns = [
'cbc' => 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2'
];
$xml = new SimpleXMLElement(
'<?xml version="1.0" encoding="UTF-8"?><Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"/>'
);
$xml->addChild('cbc:UBLVersionID', '2.1', $xmlns['cbc']);
echo $xml->asXml();输出:
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:UBLVersionID xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2">2.1</cbc:UBLVersionID>
</Invoice>手动添加属性可以避免在同级中对同一命名空间进行多个定义。但这只是一种优化。
https://stackoverflow.com/questions/33738725
复制相似问题