Проверьте поля (обязательные и необязательные) в повторяющейся записи сообщения XML - PullRequest
0 голосов
/ 09 апреля 2019

Я должен проверить входящее 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, но не могу его проверить.

XML должен быть действительным, если он соответствует ниже 2 критериям:

  1. Запись «Документ» ДОЛЖНА иметь 3 (обязательные) записи «Подробности» с элементами «Имя», соответствующими «ABC», «DEF» и «GHI»
  2. Запись «Документ» МОЖЕТ иметь до 2 (необязательно) записей «Подробности». Если это так, элемент «Имя» ДОЛЖЕН соответствовать «JKL» или «MNO»

1 Ответ

0 голосов
/ 10 апреля 2019

Согласно моим комментариям, вы захотите выполнить 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()=''])"));

, а затем иметь форму определения, которая проверяет, существуют ли обязательные (равные 1)

...