Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BizTalk平面文件复杂性分析问题_Biztalk_Biztalk 2013_Biztalk 2013r2_Biztalk Pipelines - Fatal编程技术网

BizTalk平面文件复杂性分析问题

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"> <

我目前正在创建一个平面文件模式,以实现一个名为tradacom的旧的英国EDI格式。我已经复制了我正在处理的模式部分所需的内容,它通常运行良好。然而,由于模式中有很多可选项,我需要将解析器优化更改为复杂性

为了方便地解释这个问题,我将这个问题复制到了一个小得多的模式中(事实上与Tradacoms完全无关)

然后我得到了如下预期的输出

<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>