BizTalk如何在出站消息中添加xsi:schemaLocation属性
BizTalk出站XML添加xsi:schemaLocation属性实现方案
三种方式均可实现需求,无需强制使用管道,可根据业务场景选择对应方案:
方式1:Schema定义配置(优先推荐,无额外开发成本)
这是最简单的实现方式,配置完成后所有基于该Schema生成的XML会自动携带目标属性:
- 打开目标Schema的编辑器,选中根节点,在属性面板将「目标命名空间」设置为
targetNS - 点击根节点属性中的「Imports」选项右侧的省略号,导入命名空间
http://www.w3.org/2001/XMLSchema-instance,前缀设置为xsi - 为根节点新增属性,属性名称设置为
schemaLocation,所属命名空间选择刚才导入的xsi命名空间,默认值填写targetNS targetNS.xsd - 保存Schema后重新部署即可,生成的出站XML会自动包含需要的属性。
方式2:映射实现(适合需要动态调整属性值的场景)
如果schemaLocation的值需要根据运行时数据动态生成,可以用映射实现:
- 提前在目标Schema中完成xsi命名空间导入和schemaLocation属性的定义
- 在映射中直接给schemaLocation属性赋常量,或者通过脚本Functoid、字符串拼接Functoid动态生成属性值
- 映射执行完成后输出的XML就会携带目标属性。
方式3:管道实现(适合批量统一处理场景)
如果需要给所有出站XML统一添加该属性,不方便逐一修改Schema或映射,可以用管道实现:
- 无需自定义开发组件,直接使用BizTalk自带的XML汇编器:在发送管道的XML汇编器属性中,将「文档规范」选择为你的目标Schema,同时将「添加架构位置注解」属性设置为
True - 汇编器会自动在出站XML的根节点添加xsi命名空间声明和对应的schemaLocation属性
- 也可以自定义管道组件,在XML组装阶段通过DOM操作给根节点手动添加属性,适合有特殊定制需求的场景。
最终生成的XML格式符合预期:
<?xml version="1.0" encoding="utf-8"?> <root xmlns="targetNS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="targetNS targetNS.xsd">
内容的提问来源于stack exchange,提问作者Martin Bring
相关产品推荐
相关产品推荐

