无法抑制BizTalk映射中的节点

| 下午都 我正在学习BizTalk并被卡在这个问题上。 有一个包含电话或地址的选择组。 我可以得到一些在输出电话时不显示的地址字段。 为了简化起见,我将讨论\“ CityName \”字段。 我尝试了以下方法: 将输入文件中的“ City \”(文本)节点映射到输出中的“ CityName \”。将一个Exists逻辑函数连接到输入节点中的\“ Address1 \”节点和输出中的\“ CityName \”。我总是得到一个城市名称,并填上文字。 将输入文件中的\“ City \”节点和Exists逻辑函数映射到Value Mapper函数。将值映射器功能连接到输出中的CityName。我在地址节点中得到一个城市名称(正确),在电话节点中得到一个空节点(错误)。 将输入文件中的\“ City \”节点和Exists逻辑功能类映射到值映射器(平化)功能类。将值映射器(平化)函子连接到输出中的CityName。我在地址节点中得到一个城市名称(正确),在电话节点中得到一个空节点(错误)。 我认为后两个应该已经工作了,但是都给出了一个空节点而不是一个抑制节点。空节点没有属性。 此模式类型描述CityName节点:
<xsd:complexType name=\"NameType\">
    <xsd:simpleContent>
        <xsd:extension base=\"xsd:string\">
            <xsd:attribute name=\"languageID\" type=\"xsd:language\" use=\"optional\">
            </xsd:attribute>
            <xsd:attribute name=\"sequence\" type=\"IntegerNumericType\">
            </xsd:attribute>
            <xsd:attribute name=\"sequenceName\" type=\"StringType\" />
        </xsd:extension>
    </xsd:simpleContent>
</xsd:complexType>

<xsd:simpleType name=\"IntegerNumericType\">
    <xsd:restriction base=\"xsd:integer\" />
</xsd:simpleType>

<xsd:simpleType name=\"StringType\">
    <xsd:restriction base=\"xsd:string\" />
</xsd:simpleType>
类型定义中是否有某些内容会强迫创建一个空节点? 谢谢 编辑:下面是不正确的输出。第二和第三通信节点具有 一个“地址子级”节点,不应这样做。 我在平面输入模式中的电话号码和第一个地址行上有一个循环的functoid。这样就产生了三个通讯节点。我在地址线上使用了Logical Existance函数,以禁止显示第一个节点中的电话信息。我在输出的逻辑非functoid上直接绑定到输出模式中的Address节点。我认为应该关闭整个地址节点,但事实并非如此。 我尝试将连接到逻辑存在功能的值映射功能添加到城市名称和邮政编码元素,这使它们为空,但是它们不会消失。啊! 我检查了这些字段,并将所有字段都设置为零。MinOccurs,而且我不认为它们被分配了默认值。
<ns0:Communication>
    <ns0:Address>
        <ns0:AddressLine sequence=\"1\">1234 My St</ns0:AddressLine>
        <ns0:AddressLine sequence=\"2\">Apt. 2</ns0:AddressLine>
        <ns0:CityName>Kansas City</ns0:CityName>
        <ns0:CountrySubDivisionCode name=\"State\">MO</ns0:CountrySubDivisionCode>
        <ns0:CountrySubDivisionCode name=\"County\">Jackson</ns0:CountrySubDivisionCode>
        <ns0:CountryCode>US</ns0:CountryCode>
        <ns0:PostalCode>64099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
<ns0:Communication sequence=\"1\">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Personal</ns0:UseCode>
    <ns0:DialNumber>1234567890</ns0:DialNumber>
    <ns0:Address>
        <ns0:CityName />
        <ns0:CountryCode />
        <ns0:PostalCode>64099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
<ns0:Communication sequence=\"2\">
    <ns0:ChannelCode>Telephone</ns0:ChannelCode>
    <ns0:UseCode>Business</ns0:UseCode>
    <ns0:DialNumber>0987654321</ns0:DialNumber>
    <ns0:Address>
        <ns0:CityName />
        <ns0:CountryCode />
        <ns0:PostalCode>64099</ns0:PostalCode>
    </ns0:Address>
</ns0:Communication>
    
已邀请:
拥有示例输入和输出xml代码片段将有帮助。没有这个,我可以猜测xml结构。如果它们看起来像这样,则下面的映射应该可以正常工作: 您的架构看起来像这样吗?如果将目标模式中的ѭ2set设置为
Max Occurs = unbounded
,则此类映射产生的输出是有效的。如果不是这种情况,并且如果您只能有一个Contact输出,那么仅在地址不存在的情况下才必须输出Phone,如下所示: 当然,这似乎有点愚蠢,因为人们希望在源xml中同时拥有一个地址和一个电话,而目标xml则使您无法同时拥有这两个地址。 如果这些情况都不符合您的情况,请编辑问题以提供更多详细信息。     
模式上的最小和最大出现次数默认为1。映射器在生成XSLT时会对其进行查看。尝试将“最小出现次数”设置为0。     
解决此问题的方法是直接使用xsl而不是内置的映射器。 使用xsl,您可以控制何时以及如何选择值。那很难 使用多个循环函子时。     

要回复问题请先登录注册