【问题标题】:Biztalk 2010: mapping an xsd with a lot of elements with the same nameBiztalk 2010:用大量同名元素映射 xsd
【发布时间】:2010-09-15 10:05:22
【问题描述】:

在 Bitzalk 2010 中,我应该从输入映射到具有以下结构的 XML:

<REQUEST>
  <PROGRAM name="PROGRAM123">
    <INPUT>
      <INSTRUCT name="INSTR1">
         <FIELD name="FIELD11">VALUE1</FIELD>
         <FIELD name="FIELD12">VALUE2</FIELD>
         <FIELD name="FIELD13">VALUE3</FIELD>
       </INSTRUCT>
       <INSTRUCT name="INSTR2">
         <FIELD name="FIELD21">VALUE4</FIELD>
         <FIELD name="FIELD22">VALUE5</FIELD>
         <FIELD name="FIELD23">VALUE6</FIELD>
         <FIELD name="FIELD24">VALUE7</FIELD>
       </INSTRUCT>
       <INSTRUCT name="INSTR2">
         <FIELD name="FIELD21">VALUE8</FIELD>
         <FIELD name="FIELD22">VALUE9</FIELD>
         <FIELD name="FIELD23">VALUE10</FIELD>
         <FIELD name="FIELD24">VALUE11</FIELD>
       </INSTRUCT>
     </INPUT>
   </PROGRAM>
</REQUEST>

生成的 XSD 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="REQUEST" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
  <xs:element name="REQUEST" msdata:IsDataSet="true" msdata:Locale="en-US">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="PROGRAM">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="INPUT" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="INSTRUCT" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:sequence>
                          <xs:element name="FIELD" nillable="true" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                              <xs:simpleContent msdata:ColumnName="FIELD_Text" msdata:Ordinal="1">
                                <xs:extension base="xs:string">
                                  <xs:attribute name="name" type="xs:string" />
                                </xs:extension>
                              </xs:simpleContent>
                            </xs:complexType>
                          </xs:element>
                        </xs:sequence>
                        <xs:attribute name="name" type="xs:string" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>    
            </xs:sequence>
            <xs:attribute name="name" type="xs:string" />
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

生成的结构只是“通用的”,我必须使用表循环 functoid 将其映射到 Biztalk。我从这个解决方案中得到了信息:http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html 但这对我来说似乎很麻烦(我有 40 个字段和一些常数值)。

另一种可能性是使用 XSLT。但我没有任何经验,我更愿意直接在 Biztalk 中映射它(没有 XSLT)

是否有可能创建 XSD 方案,所以我将在地图编辑器中拥有所有字段并在其中创建映射(不使用表循环 functoid)。

任何想法/cmets 将不胜感激(即使答案是:“使用 XSLT”)

【问题讨论】:

    标签: xsd mapping biztalk biztalk-2010


    【解决方案1】:

    无论如何,我们通常最终都会将 XSLT 用于任何重要的地图。

    无论如何,BizTalk 都会为您创建 XSLT :)

    所以会推荐:

    • 尽可能使用 BizTalk 映射器(似乎 REQUEST、PROGRAM、INPUT 和 INSTRUCT 是可映射的)
    • 编译您的项目
    • 在 Visual Studio 的解决方案资源管理器中单击 .btm 文件,然后选择顶部的“显示所有文件”。 您现在应该会看到一个隐藏文件 SameFileName.btm.cs。在此文件中是 BizTalk 生成的 XSLT。复制此 XSLT,并将其粘贴到一个新文件中 - 将其另存为 .xslt。您需要将双引号替换为单引号。
    • 再次打开原始 .btm(地图)。单击模式之间的地图灰色区域(网格属性)。在“自定义 XSLT 路径”属性中,选择新创建的 .XSLT 文件。

    BizTalk 的映射器为您提供了 XSLT 的先机,您应该能够很容易地掌握基本的 XSLT。一个问题 - 确保记住命名空间别名前缀(通常是 s1)

    编辑:请注意,以上内容适用于 BizTalk 2009

    编辑

    作为一个理智的预防措施,在 btm 的可视化地图中,我建议您手动删除灰色映射区域中的所有映射线和 functoid,以防您忘记您现在正在使用自定义 xslt。如果您使用自定义 xslt 测试地图,则映射器会发出提醒,提醒您使用 xslt 文件并忽略可视地图。

    【讨论】:

      【解决方案2】:

      获取生成的 xlst 的一种更简单的方法(通常是从 bts2006 开始就有效的推荐方法)是在解决方案资源管理器中右键单击 btm 文件并选择“验证地图”。它的输出为您提供了独立文件中的 xslt 和扩展对象(某些 functoid 和外部类引用使用扩展对象文件)。

      从这里您可以保存和修改 xslt 输出 - 无需解析 .btm.cs 文件或担心字符串编码问题,例如缺少属性或命名空间周围的转义双引号...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多