【发布时间】:2015-03-28 01:37:44
【问题描述】:
我正在处理一个大型架构映射。映射的任务之一是规范化特殊数据类型值。对于具有此数据值的每个元素,需要将 Src 值发送到外部程序集以进行“标准化”。
在 src 和 dst 模式中都有数百个此类元素。它使映射文件变得非常大并且难以维护。
我想知道是否可以使用某种 xslt functorids 甚至自定义的 xslt 来简单地将所有元素与此数据类型匹配并进行映射。
对于所有其他元素映射,简单的值复制就足够了,但是 src 和 dst 有不同的目标架构。
有什么建议吗?
更新: 我创建了一个简单的模式来解释我的情况:下面的模式。 您可以假设存在另一个具有相同结构但目标名称空间不同的架构。映射需要找到数据类型为“NM”的所有元素,并将其值提供给外部程序集。 (假设它是一个简单的 C# string.Reverse()) 然后将值输出到 dst 架构元素中的同一节点。
<?xml version="1.0" encoding="utf-16"?>
<xs:schema xmlns="http://BizTalk_Server_Project1.Schema1" xmlns:b="http://schemas.microsoft.com/BizTalk/2003" targetNamespace="http://BizTalk_Server_Project1.Schema1" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element name="Record1">
<xs:complexType>
<xs:sequence>
<xs:element name="R2">
<xs:complexType>
<xs:sequence>
<xs:element name="R3">
<xs:complexType>
<xs:sequence>
<xs:element name="UsedName">
<xs:simpleType>
<xs:restriction base="NM" />
</xs:simpleType>
</xs:element>
<xs:element name="Age">
<xs:simpleType>
<xs:restriction base="xs:int" />
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="AnotherName">
<xs:simpleType>
<xs:restriction base="NM">
<xs:maxLength value="10" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
<xs:attribute name="Gender">
<xs:simpleType>
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:attribute>
</xs:complexType>
</xs:element>
<xs:element name="Name">
<xs:simpleType>
<xs:restriction base="NM">
<xs:maxLength value="10" />
<xs:minLength value="1" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="NM">
<xs:restriction base="xs:string" />
</xs:simpleType>
</xs:schema>
【问题讨论】:
-
能否请您使用特殊数据类型发布一个小的 xml sn-p。
-
你真的得到了像 Record1、Record2、Resord3...Record8762 这样的元素。如果是,请返回源并让他们更改此设置。这不是正常的 Xml。
应该只是重复。 -
谢谢。约翰。实际上,该模式是一个复杂的 EDI X12 模式。这是无法改变的。上面的架构只是一个简单的示例。