Biztalk: группировка элементов во время сопоставления

Есть ли способ взять файл XML, который выглядит так:

<?xml version="1.0" encoding="utf-8"?>
<spMyStoredProc xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo">
<StoredProcedureResultSet0>
     <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo/spMyStoredProc">
       <Item>1</Item>
       <Property>something</property>
     </StoredProcedureResultSet0>
     <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo/spMyStoredProc">
       <Item>2</Item>
       <Property>something</property>
     </StoredProcedureResultSet0>
     <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo/spMyStoredProc">
       <Item>3</Item>
       <Property>something</property>
       <Group>1</Group>
     </StoredProcedureResultSet0>
     <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo/spMyStoredProc">
       <Item>4</Item>
       <Property>something</property>
       <Group>1</Group>
     </StoredProcedureResultSet0>
     <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo/spMyStoredProc">
       <Item>5</Item>
       <Property>something</property>
       <Group>2</Group>
     </StoredProcedureResultSet0>
     <StoredProcedureResultSet0 xmlns="http://schemas.microsoft.com/Sql/2008/05/TypedProcedures/dbo/spMyStoredProc">
       <Item>6</Item>
       <Property>something</property>
       <Group>2</Group>
     </StoredProcedureResultSet0>
  </StoredProcedureResultSet0>
  <ReturnValue>0</ReturnValue>
</spMyStoredProc>

Выходите в таком формате:

<MyRequests>
    <Request>
       <Item ID="1" Property="Something" />
    </Request>
    <Request>
       <Item ID="2" Property="Something" />
    </Request>
    <Request GroupID="1">
       <Item ID="3" Property="Something" />
       <Item ID="4" Property="Something" />
    </Request>
    <Request GroupID="2">
       <Item ID="5" Property="Something" />
       <Item ID="6" Property="Something" />
    </Request>
</MyRequests>

Я близок к тому, чтобы просто использовать прямую карту от исходной схемы до места назначения, но она не группирует вместе элементы, которые имеют в ней один и тот же идентификатор группы.

По сути, то, что я могу получить без функтоидов, это:

<MyRequests>
    <Request>
       <Item ID="1" Property="Something" />
    </Request>
    <Request>
       <Item ID="2" Property="Something" />
    </Request>
    <Request GroupID="1">
       <Item ID="3" Property="Something" />
    </Request>
    <Request GroupID="1">
       <Item ID="4" Property="Something" />
    </Request>
    <Request GroupID="2">
       <Item ID="5" Property="Something" />
    </Request>
    <Request GroupID="2">
       <Item ID="6" Property="Something" />
    </Request>
</MyRequests>

person SpaceCowboy74    schedule 27.01.2014    source источник
comment
Показанный вами ввод — это не документ XML, а фрагмент XML, поэтому XSLT не сможет его проанализировать. Его нужно обернуть в один элемент верхнего уровня.   -  person LarsH    schedule 28.01.2014
comment
P.S. Вы используете XSLT 1.0 или 2.0? Ответ на группировку задач обычно намного проще в 2.0.   -  person LarsH    schedule 28.01.2014
comment
Обновлен исходный XML, чтобы показать более близкое представление исходного документа. Только опубликованный фрагмент ранее из-за правил дезинфекции моей компании.   -  person SpaceCowboy74    schedule 28.01.2014


Ответы (1)


Похоже, что XSLT 2.0 не поддерживается в Biztalk, поэтому этот ответ относится к XSLT 1.0.

Предполагая, что ваш входной файл XML правильно сформирован, т.е. заключен в один элемент верхнего уровня...

Стандартным подходом к такому типу задач группировки является менхская группировка. См., например, https://stackoverflow.com/a/1929273/423105 или https://stackoverflow.com/a/2334224/423105. Если у вас возникли проблемы с применением этих ответов, оставьте комментарий с конкретными вопросами.

person LarsH    schedule 27.01.2014
comment
Спасибо! Я проверю это и посмотрю, что я могу придумать. - person SpaceCowboy74; 28.01.2014
comment
@OP: Еще одно хорошее объяснение мюнхенской группировки см. в jenitennison.com/xslt/grouping/ мюнхен.html - person LarsH; 28.01.2014
comment
Я думаю, что группировка работает по большей части, но она возвращает только целые значения. Есть ли способ принять null или пропустить как допустимое значение? - person SpaceCowboy74; 28.01.2014
comment
@OP: пожалуйста, опубликуйте свой код, ввод и текущий вывод. Вы можете либо отредактировать свой вопрос, чтобы сделать это, либо опубликовать новый вопрос. - person LarsH; 29.01.2014