BizTalk业务规则检查节点存在性和值
我有以下问题。我想执行一个策略,检查节点是否存在,然后检查值是否大于0BizTalk业务规则检查节点存在性和值,biztalk,business-rules,biztalk-rule-engine,Biztalk,Business Rules,Biztalk Rule Engine,我有以下问题。我想执行一个策略,检查节点是否存在,然后检查值是否大于0 <xmlDoc> <test>5</test> </xmlDoc> 假设我们有“xmlDoc”,我想检查节点“test”是否存在,以及“test”的值是否大于0 <xmlDoc> <test>5</test> </xmlDoc> 5. 当节点存在时,没有问题。但是,当节点丢失时,所有的坏消息都会丢失。。 很
<xmlDoc>
<test>5</test>
</xmlDoc>
假设我们有“xmlDoc”,我想检查节点“test”是否存在,以及“test”的值是否大于0
<xmlDoc>
<test>5</test>
</xmlDoc>
5.
当节点存在时,没有问题。但是,当节点丢失时,所有的坏消息都会丢失。。
很明显他为什么会撞车。他找不到节点“test”,因此无法检查其值
我的问题:在BizTalk BRE中是否可以检查节点的存在性和值,而不使其崩溃?条件列表中有“exists”谓词,但是,这并不总是有效的,因为值事实也会被计算 我发现解决这个问题的一种方法是创建一个词汇表项,并调整选择器以指向可能不存在的元素,在您的示例中是“text” 然后XPath字段将是/text()节点
这样,如果选择器路径返回null,则BRE知道该事实不存在,因此不会评估需要该事实的规则。如果不存在检查与值检查一起执行,则BRE不会按预期工作 解决方案: 如果节点不存在,下面的函数将返回节点值和空字符串。 使用此函数的返回值执行值检查 声明:XML文档。 路径:XML路径
public static string GetXMLPathValue(TypedXmlDocument claim, string path)
{
string nodeContent = string.Empty;
if (claim.Document.SelectSingleNode(path) != null)
return claim.Document.SelectSingleNode(path).InnerXml;
return nodeContent;
}
谢谢你的回答。我有点像你那样解决了。但是我想知道BRE是否可以检查节点是否存在,如果确实存在,是否可以检查节点的值。这样,规则仍然会被评估,这就是我想要的,这与更改选择器的作用差不多,尽管我会将其描述为“仅当节点存在时才评估规则”。是的,我使用相同的技术,有时还会更改选择器以测试节点是否不存在,以执行其他操作(例如,发出丢失的警告)。