BizTalk 2010: сопоставление XSD с большим количеством элементов с тем же именем

StackOverflow https://stackoverflow.com/questions/3716608

Вопрос

В 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>

Сгенерированная структура была просто «общего», и мне пришлось бы использовать таблицу, цикличный функнт, чтобы сопоставить его в BizTalk. У меня есть информация из этого решения: http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html.Но это кажется очень громоздким для меня (у меня есть 40 полей с некоторыми постоянными значениями).

Другая возможность использовать XSLT. Но у меня нет опыта с ним, и я бы предпочел сопоставить его прямо в Biztalk (без XSLT)

Есть ли возможность создания схемы XSD, поэтому у меня будет все поля в редакторе карты и создайте отображение там (без использования таблицы петли Functoid).

Любые идеи / комментарии будут оценены (даже если ответ: «Использовать XSLT»)

Это было полезно?

Решение

FWIW мы обычно заводим XSLT для любых нетривиальных карт в любом случае.

И BizTalk создает вам XSLT для вас :)

Так что бы порекомендовал:

  • Делайте как можно лучше с Ma Mapper Biztalk (кажется, запрос, программа, ввод и инструктирование, которые являются нагруженными)
  • Составьте свой проект
  • Нажмите на ваш .btm Файл в исследовании решения в Visual Studio, а затем выберите «Показать все файлы» в верхней части. Теперь вы должны увидеть скрытый файл SameFileName.btm.cs. Отказ В этом файле XSLT, который генерирует BizTalk. Скопируйте этот XSLT и вставьте его в новый файл - сохраните это как .xslt. Вам нужно заменить двойные цитаты одним кавычками.
  • Откройте оригинал .BTM (карта) снова. Нажмите на серую область карты между схемами (свойства сетки). В свойстве «Custom XSLT Path» выберите свой вновь созданный файл .xslt.

Mapper Beiztalk дал вам главный пункт на вашем XSLT, и вы сможете довольно легко забрать базовый XSLT. Один Gotcha - убедитесь, что вы помните префикс псевдонима пространства имен (обычно S1)

Редактировать: обратите внимание, что вышесказанное для BizTalk 2009

Редактировать

В качестве здравоохранения, на визуальной карте BTM, я предлагаю вам вручную удалить все линии сопоставления и функционирования из серой области сопоставления, если вы забыли, что теперь вы используете пользовательский XSLT. Если вы протестируете карту с пользовательским XSLT, Mapper позволяет использовать напоминание о том, что файл XSLT используется, и визуальная карта игнорируется.

Другие советы

Проще говоря, чтобы получить сгенерированный XLST (и, как правило, рекомендуемый способ сработал, поскольку хотя бы BTS2006) - щелкните правой кнопкой мыши файл BTM в исследовании вашего решения и выберите «Validate Map». Выход этого дает вам как XSLT, так и расширение объектов в автономных файлах (определенные функции и ссылки на внешние классы используют файл объектов расширения).

Отсюда вы можете сэкономить и изменить вывод XSLT - не нужно использовать файл .BTM.cs или беспокоиться о проблемах строки, такие как отсутствующие сбежавшие двойные цитаты вокруг атрибута или пространства имен ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top