验证XML消息重复记录中的字段(必填和可选)

时间:2019-04-09 07:14:53

标签: xml schema biztalk biztalk-2013

在进一步处理之前,我必须验证进入BizTalk的XML消息(下面的示例)。 “详细信息”(重复)记录可以在XML消息中以任何顺序排列。

<Document>
    <Details>
        <Name>ABC</Name>
    </Details>
    <Details>
        <Name>DEF</Name>
    </Details>
    <Details>
        <Name>GHI</Name>
    </Details>
    <Details>
        <Name>JKL</Name>
    </Details>
    <Details>
        <Name>MNO</Name>
    </Details>
</Document>

我正在业务流程中循环提取所有“名称”字段值,但无法对其进行验证。

如果XML符合以下两个条件,则该XML应该有效:

  1. “文档”记录必须具有3个(必填)“详细信息”记录,且“名称”元素与“ ABC”,“ DEF”和“ GHI”匹配
  2. “文档”记录可能最多包含2个(可选)“详细信息”记录。如果是,则“名称”元素必须与“ JKL”或“ MNO”匹配

1 个答案:

答案 0 :(得分:0)

根据我的评论,您将希望以Expression形状执行XPath,例如

nNumberItemsABC = System.Convert.ToInt32(xpath(MsgName,"count(/*[local-name()='Document' and namespace-uri()='']/*[local-name()='Details' and namespace-uri()=''][Name='ABC']/*[local-name()='Name' and namespace-uri()=''])"));
nNumberItemsDEF = System.Convert.ToInt32(xpath(MsgName,"count(/*[local-name()='Document' and namespace-uri()='']/*[local-name()='Details' and namespace-uri()=''][Name='DEF']/*[local-name()='Name' and namespace-uri()=''])"));
nNumberItemsGHI = System.Convert.ToInt32(xpath(MsgName,"count(/*[local-name()='Document' and namespace-uri()='']/*[local-name()='Details' and namespace-uri()=''][Name='GHI']/*[local-name()='Name' and namespace-uri()=''])"));

然后具有一个Decide形状,用于检查强制性条件是否存在(等于1)