UBL发票XML中CustomizationID取值及位置错误排查
我依据UBL-Invoice-2.1.xsd和EN16931校验规则生成发票UBL XML文件,在欧盟ITB平台校验时遇到问题。按照规则要求加入了CustomizationID元素,值为urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0,但校验返回错误:
cvc-complex-type.2.4.a: Invalid content was found starting with element '{urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2}:CustomizationID}'. One of '{urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2}:IssueTime, {urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2}:DueDate, ..., {urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2}:AccountingSupplierParty}' is expected.
错误原因
这个错误和CustomizationID的取值无关,核心问题是元素的位置不符合UBL 2.1 XSD的结构约束。UBL-Invoice-2.1.xsd对Invoice根元素下的子元素顺序有严格要求:CustomizationID必须作为Invoice的第一个子元素出现,在IssueTime、DueDate、AccountingSupplierParty等所有后续元素之前。你当前将CustomizationID放在了错误的位置(比如这些元素之后),导致XSD结构校验失败。
解决方法
- 调整元素位置:将CustomizationID元素移动到Invoice根元素的最开头,确保它是第一个子元素,在IssueTime、DueDate等所有其他元素之前
- 确认命名空间正确:CustomizationID的命名空间必须是
urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2,与XSD定义一致(通常用前缀cbc:指代该命名空间) - 参考正确结构示例:
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"> <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID> <cbc:IssueTime>2024-05-20T14:30:00Z</cbc:IssueTime> <cbc:DueDate>2024-06-19</cbc:DueDate> <cac:AccountingSupplierParty> <!-- 供应商信息内容 --> </cac:AccountingSupplierParty> <!-- 其他发票元素 --> </Invoice>
内容的提问来源于stack exchange,提问作者aprotiere

