我需要我的管线图,以停止转换xml:lang ns1lang
-
14-10-2019 - |
题
我有地图在管2009年,将一些数据纳入一个XML文件被发送到另一个系统。目标架构包括一些元素 xml:lang
属性。管理产生这些 ns1:lang
.目标系统的要求的前缀 xml
可以使用。
这是一个简单的例子显示什么管是这样做:
sample.xsd
<xs:schema targetNamespace="http://example.com/"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="common.xsd"
namespace="http://www.w3.org/XML/1998/namespace" />
<xs:element name="example">
<xs:complexType>
<xs:attribute ref="xml:lang" />
</xs:complexType>
</xs:element>
</xs:schema>
common.xsd
<xs:schema xmlns:xml="http://www.w3.org/XML/1998/namespace"
targetNamespace="http://www.w3.org/XML/1998/namespace"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:attribute name="lang" type="xs:language" />
</xs:schema>
例地图,输出
<ns0:example xmlns:ns0="http://example.com/"
xmlns:ns1="http://www.w3.org/XML/1998/namespace"
ns1:lang="en-US" />
是否有某种方式说服管用的 xml
前缀?
解决方案
据我所知,没有系统的方式为实现这一目标。
然而,有两个解决方案,我可以看到:
使用定制的样式表XML
如果你右击在地图上和仔细看在产生xsl样式表中,你会看到一个XML namespace宣言是这样的:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ns1="http://www.w3.org/XML/1998/namespace"
...
>
...
<xsl:attribute name="ns1:lang">
...
这是默认的行为的管映射器,你无法做任何事情。然而,如果继续提取的产生XSLT和使用此作为后端地图,你可以改变这一宣言对于预期结果。
- 第一,复制的样式表中的位置的项目。
- 包括这样式表作为一个文件在您的管理项目
- 更新的样式表中,使空间宣言》和《匹配属性的前缀是正确的。
所得xsl样式表看起来像这样:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
...
>
...
<xsl:attribute name="xml:lang">
...
现在你可以使用这个定制的样式表作为后端的地图。
- 在Visual Studio、开放的地图。
- 点击任何地方上的一个空白空间管理的设计师的表面。
- 在地图的性质,找到的 定义XSL路径 并指定位置的定的样式表。
使用定制的管组件
什么你以后是这个消息是正确的目标收件人。这样的想法是改变犯罪名称空间作为前缀的一部分发送消息的外部管.转变发生期间,处理发送管道。
Nic巴顿 有博客和提供源代码 关于这个在这里.你可以使用他的样本为基础,执行替换的名字空间的前缀,而不是替换名字空间的自己。
我强烈鼓励你检查了整个系列的员额,他做了关于发展中国家流管道组成。Nic作出了广泛和彻底的工作描述的所有有需要强大的作者和企业级管道组成。
其他提示
更容易做到这一点并让所有工作的方法就是在架构定义开始时添加名称空间声明。
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xml="http://www.w3.org/XML/1998/namespace">
<xs:import schemaLocation="xml.xsd" namespace="http://www.w3.org/XML/1998/namespace" />
除了Maxime的建议外,这是我发现的其他可能性:
忽略它,并希望供应商的API会接受。
我认为这不会起作用。当我测试地图时,BizTalk给我一个错误:
Output validation error: Prefix 'ns1' cannot be mapped to namespace name reserved for "xml" or "xmlns".
你好,biztalk!?您是决定使用NS1的人。不要向我抱怨!
使用基于XSL的脚本函数强制输出。
这是基于 我在Biztalk论坛上收到的建议. 。它要求我们伪造输出模式以使用函数XML:lang属性代替的虚拟属性。
添加搜索/替换表达式
采用调用地图的编排,并在其之后添加表达式,以将我们发送给供应商的XML并通过搜索/替换正则延期以修复命名空间前缀。