在重复记录XML消息中验证字段(强制和可选)

问题描述 投票:0回答:1

我必须在进一步处理之前将传入的XML消息(下面的示例)验证到BizTalk中。 “详细信息”(重复)记录可以在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>

我在Orchestration的循环中提取所有'Name'字段值,但无法验证它。

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

  1. '文件'记录必须有3个(强制)'详细'记录,'名称'元素匹配'ABC','DEF'和'GHI'
  2. “文件”记录可以提供最多2个(可选)“详细信息”记录。如果是,'Name'元素必须匹配'JKL'或'MNO'
xml schema biztalk biztalk-2013
1个回答
0
投票

根据我的评论,您将需要在表达式形状中执行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)

© www.soinside.com 2019 - 2024. All rights reserved.