如何在ABAP Simple Transformation中添加XML命名空间并重命名元素
ABAP Simple Transformation添加命名空间前缀解决方案
报错的核心原因是仅添加了命名空间前缀,没有在Simple Transformation代码的头部声明前缀对应的命名空间URI,XML规范强制要求所有使用的命名空间前缀必须提前完成绑定声明。
具体实现步骤
- 第一步:在ST的根标签
<tt:transform>中提前声明cfdi、document前缀和对应绑定的命名空间URI,示例代码如下:
<tt:transform xmlns:tt="http://www.sap.com/transformation-templates" xmlns:cfdi="http://www.sat.gob.mx/cfd/4" <!-- 替换为业务要求的cfdi官方命名空间URI --> xmlns:document="http://your.biz.ns/document"> <!-- 替换为业务要求的document官方命名空间URI -->
- 第二步:直接按需求修改元素名添加前缀即可,无需其他额外配置,完整ST模板示例:
<tt:root name="GT_OUT_DATA" /> <!-- 声明你要传入的内表/结构变量 --> <tt:template> <cfdi:Complement> <!-- 根元素直接加cfdi前缀,已提前声明不会报错 --> <!-- 所有子元素直接加document前缀即可 --> <document:BillHead> <tt:value ref="GT_OUT_DATA.HEAD" /> </document:BillHead> <document:BillItem tt:loop="GT_OUT_DATA.ITEM"> <tt:value ref="$item.CONTENT" /> </document:BillItem> </cfdi:Complement> </tt:template> </tt:transform>
- 第三步:激活ST后重新调用生成XML,最终输出的XML会自动在根节点携带命名空间声明,示例输出如下:
<cfdi:Complement xmlns:cfdi="http://www.sat.gob.mx/cfd/4" xmlns:document="http://your.biz.ns/document"> <document:BillHead>测试单据头</document:BillHead> <document:BillItem>测试行项目1</document:BillItem> <document:BillItem>测试行项目2</document:BillItem> </cfdi:Complement>
注意:命名空间URI必须严格和对接方要求的一致,不可随意填写,否则生成的XML会在校验环节失败,不确定URI可索要对接方的官方XML规范文档确认。
内容的提问来源于stack exchange,提问作者Antonio Lopez
相关产品推荐
相关产品推荐

