我正在使用Tibco BW5。我有JMS选择器字符串,如下所示:
SelectorString = "Name='Value' AND Name='Value' AND Name='Value' AND ...."
我需要在" JMS队列请求者"中使用此字符串。或者" JMS队列发件人"作为JMS选择器。
解决方案:
用于将选择器设置为" JMS队列请求者"或者" JMS队列发件人"我正在使用" DynamicProperties" in"输入"标签:
将SelectorString映射到" DynamicProperties"我创造了#34; Repeat-Until-True"内部有MapData的组。
重复条件:
($i >= count(tib:tokenize($Start/root/SelectorString, "AND")))
我映射"名称"致:
tib:trim(tib:tokenize(tib:tokenize($Start/root/SelectorString, "AND")[$i], "=")[1])
我映射"价值"致:
substring-before(substring-after(tib:tokenize(tib:tokenize($Start/root/SelectorString, "AND")[$i], "=")[2], "'"), "'")
然后我将累计输出设置为" JMS队列请求者"动态属性。
请看截图:
有更优雅的方法吗?
答案 0 :(得分:1)
您似乎对基于集合的数学没有太多的经验……一种典型的“顺序程序员的集合方法”:-(
假设您有一个非分层语句(名称值对之间仅包含“ AND”),则可以一次将“ AND”转换为单个“特殊字符”(如“¶”),使用for-each通过此char将带有标记化字符串的XML元素,然后在for-each内部拆分和修剪名称和值。
那是基于集合的方法,btw比迭代循环(XPath代码的4行简单代码)要快得多