Как удалить родительские записи, которые не имеют дочерних элементов на карте Biztalk? - PullRequest
2 голосов
/ 24 января 2011

Представьте, что у вас есть следующие исходные данные с отношением родитель-потомок между Box и его Cakes.

<Box id = 1>
   <Cakes>
    <Cake id =1>
            <some other tags ...>
    </Cake>
    <Cake id =2>
            <some other tags ...>
    </Cake>
   </Cakes>   
</Box>
<Box id = 2>    
    <Cakes/>   
</Box>

Цель состоит в том, чтобы правильно удалить коробки, которые не содержат тортов (например, Box 2)в месте назначения, сохраняя при этом возможность правильно отображать элементы Cake и их дочерние теги в графическом преобразователе (поэтому без использования необработанного выражения XSLT, которое могло бы предотвратить это).

Есть ли хороший способ сделать этоиспользуя функтоиды?Или что-то еще?

Ответы [ 2 ]

2 голосов
/ 24 января 2011

Вы можете проверить, возвращает ли атрибут id первого Cake потомка текущего Box пустую строку.


Вы получаете желаемое преобразование, используя следующие функтоиды:

1) вставить итерацию функтоид и подключиться к Box узлу

2) вставить индекс функтоид и подключиться к атрибуту id Cake узел

3) подключить индекс функтоид к итерация функтоид (выходная сторона)

4) вставить не равно функтоиди подключите к Index functoid (выходная сторона)

5) configure Not Equal functiod input;добавить пустую строковую константу

6) подключить Не равно выводить к целевому сообщению Box узел

7) вставить Отображение значения функтоид

8) подключить Не равно выводить на Отображение значений сторона ввода

9) подключить id атрибут исходного сообщения Box узел к Сопоставление значений ввод

10) подключение Сопоставление значений вывод в id атрибут целевого сообщения Box узел


Извините, я не могупредоставьте скриншот прямо сейчас;Я надеюсь, что вы можете понять из моего описания.

2 голосов
/ 24 января 2011

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

Смотрите эти SO сообщения Здесь и здесь о том, как конвертировать карту в XSLT

Ваш XSLT будет выглядеть примерно так:

<?xml version="1.0" encoding="utf-16"?>
<xsl:stylesheet
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt"
        xmlns:var="http://schemas.microsoft.com/BizTalk/2003/var"
        exclude-result-prefixes="msxsl var userCSharp"
        version="1.0"
        xmlns:userCSharp="http://schemas.microsoft.com/BizTalk/2003/userCSharp">

    <xsl:output
        omit-xml-declaration="no"
        method="xml"
        version="1.0"
        encoding="UTF-8" />

    <xsl:template match="/">
        <xsl:apply-templates select="Boxes" />
    </xsl:template>
    <xsl:template match="Boxes">
        <MappedBoxes>
            <xsl:for-each select="Box[count(Cakes/Cake) > 0]">
                <MappedBox>
                    <MappedCakes>
                        <xsl:for-each select="Cakes/Cake">
                            <MappedCake>
                                <xsl:value-of select="Tag/text()" />
                            </MappedCake>
                        </xsl:for-each>
                    </MappedCakes>
                </MappedBox>
            </xsl:for-each>
        </MappedBoxes>
    </xsl:template>
</xsl:stylesheet>

Это был XML, который я использовал

<Boxes>
    <Box id = "1">
        <Cakes>
            <Cake id ="1">
                <Tag>FirstCake</Tag>
            </Cake>
            <Cake id ="2">
                <Tag>SecondCake</Tag>
            </Cake>
        </Cakes>
    </Box>
    <Box id = "2">
        <Cakes/>
    </Box>
    <Box id = "3">
    </Box>
    <Box id = "4">
        <Cakes>
            <Cake id ="4">
                <Tag>FourthCake</Tag>
            </Cake>
            <Cake id ="5">
                <Tag>FifthCake</Tag>
            </Cake>
        </Cakes>
    </Box>
</Boxes>
...