BizTalk BAM - вручную редактировать BTT XPath, чтобы он возвращал только первый экземпляр свойства Message Payload?
У нас есть предпочтение использовать TPE для отслеживания BAM, поскольку оно может быть развернуто независимо от наших оркестровок.
Однако в какой-то момент нашего процесса нам необходимо отслеживать свойство полезной нагрузки сообщения, которое имеет отношение 1:N с корневым XML-элементом сообщения.
Несмотря на соотношение 1:N, извлечения только первого значения этого свойства будет достаточно для наших потребностей в отслеживании.
Как обычно, если мы пытаемся отследить это, в журнале регистрируется следующее сообщение XLANG:
AmbiguousXPathException - The result set for the XPath expression ...
contains more than a single node
Мы попытались изменить BTT XPath напрямую, чтобы выбрать только первый экземпляр этого свойства
я пробовал
'XPath="//*[local-name()='Property' and namespace-uri()='{URI}' ...]/[1]'
но затем получаю ошибку "Выражение должно вычисляться для набора узлов"
и проще
'//Property[1]' and '//Property[position() = 1]'
Не давайте никаких ошибок, но это тоже не вытаскивает мою собственность.
Наконец, кто-нибудь может объяснить разницу между XPath и SomXPath в файле BTT?
1 ответ
Это похоже на съемку в темноте без какого-либо XML-документа, но вы можете попробовать это:
(//*[local-name()='Property' and namespace-uri()='{URI}' ...])[1]
Это часто задаваемые вопросы, которые //x[1]
не выбирает один узел, в то время как (//x)[1]
делает.
Первое означает: каждый элемент с именем x
это первый ребенок его родителя.
Второе означает: первый элемент x
в документе.