BizTalk平面文件复杂性分析问题
我目前正在创建一个平面文件模式,以实现一个名为tradacom的旧的英国EDI格式。我已经复制了我正在处理的模式部分所需的内容,它通常运行良好。然而,由于模式中有很多可选项,我需要将解析器优化更改为复杂性 为了方便地解释这个问题,我将这个问题复制到了一个小得多的模式中(事实上与Tradacoms完全无关) 然后我得到了如下预期的输出BizTalk平面文件复杂性分析问题,biztalk,biztalk-2013,biztalk-2013r2,biztalk-pipelines,Biztalk,Biztalk 2013,Biztalk 2013r2,Biztalk Pipelines,我目前正在创建一个平面文件模式,以实现一个名为tradacom的旧的英国EDI格式。我已经复制了我正在处理的模式部分所需的内容,它通常运行良好。然而,由于模式中有很多可选项,我需要将解析器优化更改为复杂性 为了方便地解释这个问题,我将这个问题复制到了一个小得多的模式中(事实上与Tradacoms完全无关) 然后我得到了如下预期的输出 <Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema"> <
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line1>Line1</Line1>
<Line2>Line2</Line2>
<Line3>Line3</Line3>
<Line4>Line4</Line4>
<Line5>Line5</Line5>
<PostCode>PostCode</PostCode>
<Country>Country</Country>
</Address>
</Root>
然后我得到以下输出
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line4>Line1</Line4>
</Address>
</Root>
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line1/>
</Address>
</Root>
戴夫
第1行
可以看到Line1已放置在Line4元素中。由于上面的示例消息将文本“Line1”作为分隔符前面的第一个值,因此我希望上面的XML是Line1
这里发生了一些非常奇怪的事情。有人能帮忙吗?我在BizTalk 2013(CU3)和BizTalk 2013 R2中遇到了这个问题。将解析器优化更改回默认速度应该可以解决您的问题。是的,如果在记录的开头没有必填字段,平面文件反汇编程序可能会非常混乱。您将所有地址元素都设置为可选的,然后它会得到非常奇怪的结果。我发现,您应该始终至少有一个必填字段作为第一个字段,并且不应该在可选字段之后有一个必填字段 如果删除
line1
上的minOccurs=0
,它将正常工作,您将得到以下结果
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line1>Line1</Line1>
</Address>
</Root>
它将获得以下输出
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line4>Line1</Line4>
</Address>
</Root>
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line1/>
</Address>
</Root>
输出
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
</Root>
戴夫
正如他在问题中所说,“但是,因为模式中有很多可选项,我需要将解析器优化更改为复杂性。”在这种情况下,这可能不是他的选择。也许他应该考虑编写一个专用管道来处理这个文件。另一种方法可能是保持原样,然后使用地图将字段调整到正确的位置。但这种方法需要假设这些字段具有相同或几乎相同的数据类型。Line1实际上是可选的吗?e、 g.DAve+是有效记录吗?如果没有,请移除其上的minOccurs 0,它将正常工作。谢谢Dijkgraaf,谢谢。在我发布了这个问题之后,我注意到了与你建议的完全相同的行为(说实话,我确实注意到了!),我现在就要发表评论了。但你是对的,将其改为强制性当然可以解决问题。但是它之所以是强制性的,是因为我实现它的模式是一个20年前的标准,我是从一个更旧的手册中实现的。它说所有的事情都是可选的,所以我只是遵循这一点。现在它是强制性的,我会在我的地图中加入一些逻辑,考虑到它可能是空的。理解为什么它会把它放在它原来的位置,尽管它是可选的。。。。。。。。。。。。。。。为什么不是第4行或第2行?我想我们可能永远也不会发现。这里也提出了类似的问题
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
<Address xmlns="">
<Line1/>
</Address>
</Root>
DAve
<Root xmlns="http://Bidvest.Integration.Supplier.Schemas.TestSchema">
<Name xmlns="">DAve</Name>
</Root>