下午所有, 我正在学习BizTalk,并坚持这个问题。
有一个选择组,有电话或地址。 输出电话时,我可以得到一些要抑制的地址字段。 为了简单起见,我将只讨论“CityName”字段。
我尝试了以下内容:
将输入文件中的“City”(文本)节点映射到输出中的“CityName”。将 Exists 逻辑functoid连接到输入节点中的“Address1”节点和输出中的“CityName”。我总是得到一个填写了文字的城市名称。
将输入文件中的“City”节点和 Exists 逻辑functoid映射到 Value Mapper functoid。将 Value Mapper functoid连接到输出中的CityName。我在地址节点(正确)中获取城市名称,在电话节点中获得一个空节点(不正确)。
将输入文件中的“City”节点和Exists逻辑functoid映射到 Value Mapper(Flattening) functoid。将 Value Mapper(Flattening) functoid连接到输出中的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>
类型定义中是否存在强制创建空节点的内容?
由于
编辑:以下是不正确的输出。第二个和第三个通信节点有 一个Address Child节点,不应该。
我在电话号码上有一个循环functoid ,在平面输入模式中有第一个地址行。这将生成三个Communications节点。我在地址线上使用 Logical Existance functoid来抑制第一个节点中的电话信息。我在输出上有一个 Logical Not functoid,它直接绑定到输出模式中的Address节点。我认为应该关闭整个地址节点,但事实并非如此。
我尝试将连接到逻辑存在 functoid的值映射 functoid添加到城市名称和邮政编码元素中,这使它们变空,但他们不会去远。 ARG!
我检查过并且字段都设置为零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>
答案 0 :(得分:1)
有样本输入和输出xml片段会很有帮助。没有它,我可以猜测xml结构。如果它们看起来像这样,那么下面的映射应该可以正常工作:
你的架构看起来像那样吗?如果目标架构中的<Choice>
设置为Max Occurs = unbounded
,则此类映射生成的输出有效。如果不是这种情况,并且如果你只能有一个Contact输出,那么如果地址不在那里你就必须输出Phone,如下所示:
当然,这看起来有点傻,因为人们希望在源xml中同时拥有一个地址和一个电话,而目标xml会阻止你同时拥有这两者。
如果这些情况都不符合您的情况,请编辑您的问题以提供更多详细信息。
答案 1 :(得分:0)
min&amp;架构上的最大出现次数默认为1.映射器在生成XSLT时查看它。尝试将Min Occur设置为0.
答案 2 :(得分:0)
解决此问题的方法是使用xsl directly而不是内置映射器。
使用xsl,您可以控制选择值的时间和方式。那很难 当使用多个循环functoid。