BizTalk Maps: группировка разных узлов в список
-
27-09-2019 - |
Вопрос
Есть ли способ достичь следующего преобразования в Mapper BT? Если нет, какая-то умная идея?
<Person>
<Age>25</Age>
<Name>Paul</Name>
</Person>
к:
<Person>
<CustomProperties>
<CustomProperty>
<Name>Age</Name>
<Value>25</VAlue>
</CustomProperty>
<CustomProperty>
<Name>Name</Name>
<Value>Paul</VAlue>
</CustomProperty>
</CustomProperties>
Я должен агрегировать несколько элементов в списке узлов.
Заранее спасибо.
Решение
Не знаю много о Biztalk Mapper, но требуемый XSLT был бы довольно прямым:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="Person">
<xsl:copy>
<CustomProperties>
<xsl:apply-templates select="*" />
</CustomProperties>
</xsl:copy>
</xsl:template>
<xsl:template match="Person/*">
<CustomProperty>
<Name><xsl:value-of select="name()" /></Name>
<Value><xsl:value-of select="." /></Value>
</CustomProperty>
</xsl:template>
</xsl:stylesheet>
Другие советы
Вы также можете использовать функциональные функции Tableooping / TableExtractor на своей карте, чтобы построить узлы назначения.
Смотрите этот пост на примере:
http://hestia.typepad.com/flatlander/2007/01/mapping_fixed_e.html.
Похоже, у вас есть прямое отображение от ввода на вывод. Когда вы делаете свое отображение, щелкните правой кнопкой мыши на линии, нарисованную с ввода на выход. Выберите «Свойства». Существуют варианты либо копировать значение входного узла или имени входного узла. Вы можете использовать два сопоставления от каждого дочернего узла, один для извлечения имени и один для значения.