我有以下问题。我想执行一个检查节点是否存在的策略,然后它应该检查该值是否大于 0。
所以假设我们有“xmlDoc”,我想检查节点“test”是否存在以及“test”的值是否大于 0。
<xmlDoc>
<test>5</test>
</xmlDoc>
当节点存在时,没有问题。但是,当节点丢失时,所有的地狱都失败了。他崩溃的原因很明显。他找不到节点“测试”,因此无法检查其值。
我的问题:是否可以在 BizTalk BRE 中检查节点的存在性和值而不会崩溃?
我有以下问题。我想执行一个检查节点是否存在的策略,然后它应该检查该值是否大于 0。
所以假设我们有“xmlDoc”,我想检查节点“test”是否存在以及“test”的值是否大于 0。
<xmlDoc>
<test>5</test>
</xmlDoc>
当节点存在时,没有问题。但是,当节点丢失时,所有的地狱都失败了。他崩溃的原因很明显。他找不到节点“测试”,因此无法检查其值。
我的问题:是否可以在 BizTalk BRE 中检查节点的存在性和值而不会崩溃?
条件列表中有“存在”谓词,但是,这并不总是有效,因为还会评估值事实。
我发现解决此问题的一种方法是创建一个词汇项目并调整选择器以指向可能不存在的元素,在您的情况下为“文本”。
然后 XPath 字段将是 /text() 节点。
这样,如果 Selector 路径返回 null,则 BRE 知道该事实不存在,因此不会评估需要它的 Rule。
如果不存在检查与值检查一起执行,则 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;
}